Gtk2: implemented accurate frame under x11. fixes issue #36897

Gtk2: fixed Screen.WorkAreaRect. issue #36919

git-svn-id: trunk@62996 -
This commit is contained in:
zeljko 2020-04-16 09:24:25 +00:00
parent 2356d3b3d6
commit f2f8feab9b
31 changed files with 322 additions and 28 deletions

View File

@ -76,12 +76,20 @@ function DeliverGtkPaintMessage(Target: Pointer; Widget: PGtkWidget;
Area: PGDKRectangle; RepaintAll, IsAfterGtk: boolean): GBoolean;
var
Msg: TLMGtkPaint;
AInfo: PWidgetInfo;
begin
//DebugLn(['DeliverGtkPaintMessage ',DbgSName(TObject(Target)),' Widget=',GetWidgetDebugReport(Widget),' RepaintAll=',RepaintAll,' AfterGtk=',IsAfterGtk,' Area=',dbgs(Area)]);
// default is, that a control receives the paint message after gtk (including the child paints)
// In case of TCustomControl, there is no gtk painting only the
// child paintings. Let the TCustomControl paint the background.
// ToDo: Eventually there must be a 'before paint message'.
if (TObject(Target) is TCustomForm) then
begin
AInfo := GetWidgetInfo(Widget);
AInfo^.FirstPaint := True;
end;
if IsAfterGtk then
begin
if TObject(Target) is TCustomControl then exit(false);

View File

@ -487,6 +487,7 @@ type
UserData: Pointer;
FormBorderStyle: Integer; // used only by forms
FormWindowState: TGdkEventWindowState; // used only by forms to stop infinite loops eg. issue #16505
FirstPaint: boolean; // for accurate frame - forms only
end;
//TODO: remove

View File

@ -51,6 +51,24 @@ uses
type
{ TDummyWidget }
TDummyWidget = class(TObject) {needed for accurate frame on x11}
private
FFrameRect: TRect;
FFirstPaintEvent: boolean;
FWidget: PGtkWidget;
public
constructor Create; overload;
destructor Destroy; override;
function GetWidgetFrame: TRect;
function ShowDummyWidget(const ALeft, ATop, AWidth,
AHeight: integer): boolean;
procedure SendToBack;
procedure HideWidget;
property Widget: PGtkWidget read FWidget write FWidget;
end;
{ TGtk2WidgetSet }
TGtk2WidgetSet = class(TWidgetSet)
@ -248,6 +266,7 @@ type
private
{$IFDEF HASX}
FDesktopWidget: PGtkWidget;
FWSFrameRect: TRect;
{$ENDIF}
procedure Gtk2Create;
procedure Gtk2Destroy;
@ -285,6 +304,10 @@ type
{$I gtk2lclintfh.inc}
public
{$IFDEF HASX}
function CreateDummyWidgetFrame(const ALeft, ATop, AWidth,
AHeight: integer): boolean;
function GetDummyWidgetFrame: TRect;
function compositeManagerRunning: Boolean;
function GetDesktopWidget: PGtkWidget;
//function X11Raise(AHandle: HWND): boolean; currently not used

View File

@ -4106,6 +4106,7 @@ begin
if Result = nil then Exit;
Result^.LCLObject := AObject;
Result^.FirstPaint := False;
// in most cases the created widget is the core widget so default to it
Result^.CoreWidget := AWidget;
Result^.Style := AParams.Style;
@ -9314,13 +9315,15 @@ begin
XInternAtom(xdisplay, '_NET_WORKAREA', false),
0, MaxInt, False, XA_CARDINAL, @atomtype, @format, @nitems,
@bytes_after, gpointer(@current_desktop));
if (atomtype = XA_CARDINAL) and (format = 32) and (nitems > 0) then begin
if (atomtype = XA_CARDINAL) and (format = 32) and (nitems > 0) then
begin
result:=res;
ax:=current_desktop[0];
ay:=current_desktop[1];
awidth:=current_desktop[2];
aheight:=current_desktop[3];
end else begin
end else
begin
ax:=0;
ay:=0;
awidth:=0;

View File

@ -952,6 +952,7 @@ begin
FMainPoll := nil;
if not FIsLibraryInstance then
begin
FWSFrameRect := Rect(0, 0, 0, 0);
Gtk2MPF := g_main_context_get_poll_func(g_main_context_default);
g_main_context_set_poll_func(g_main_context_default, @Gtk2PollFunction);
end else
@ -1773,6 +1774,26 @@ end;
{$ifdef Unix}
{$IFDEF HASX}
function TGtk2WidgetSet.CreateDummyWidgetFrame(const ALeft, ATop, AWidth,
AHeight: integer): boolean;
var
ADummy: TDummyWidget;
begin
Result := False;
ADummy := TDummyWidget.Create;
ADummy.ShowDummyWidget(ALeft, ATop, AWidth, AHeight);
FWSFrameRect := ADummy.GetWidgetFrame;
ADummy.Free;
Result := not IsRectEmpty(FWSFrameRect);
end;
function TGtk2WidgetSet.GetDummyWidgetFrame: TRect;
begin
Result := FWSFrameRect;
end;
{$ENDIF}
procedure TGtk2WidgetSet.PrepareSynchronize(AObject: TObject);
{ This method is the WakeMainThread of the unit classes.
It is called in TThread.Synchronize to wake up the main thread = LCL GUI thread.
@ -6425,6 +6446,204 @@ begin
Result:=nil;
end;
{$IFDEF HASX}
{.$DEFINE DEBUGGTK2FRAMESIZE}
function Gtk2DummyWidgetEvent(AWidget: PGtkWidget; AEvent: PGdkEvent; AData: GPointer): gboolean; cdecl;
begin
Result := CallBackDefaultReturn;
if (AEvent^._type = GDK_EXPOSE) then
TDummyWidget(AData).FFirstPaintEvent := True;
end;
constructor TDummyWidget.Create;
begin
inherited Create;
FFrameRect := Rect(0, 0, 0, 0);
Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_decorated(PGtkWindow(Widget), True);
gtk_window_set_accept_focus(PGtkWindow(Widget), False);
gtk_window_set_focus_on_map(PGtkWindow(Widget), False);
gtk_window_set_keep_below(PGtkWindow(Widget), True);
gtk_window_set_skip_taskbar_hint(PGtkWindow(Widget), True);
gtk_widget_set_parent_window(Widget, gdk_get_default_root_window);
if Assigned(gtk_window_set_opacity) and Gtk2WidgetSet.compositeManagerRunning then
gtk_window_set_opacity(PGtkWindow(Widget), 0.5);
g_signal_connect(PGtkObject(Widget), 'event',
gtk_signal_func(@Gtk2DummyWidgetEvent), Self);
end;
function TDummyWidget.ShowDummyWidget(const ALeft, ATop, AWidth,
AHeight: integer): boolean;
var
R: TRect;
{$IFDEF DEBUGGTK2FRAMESIZE}
ATicks: QWord;
{$ENDIF}
ALoop: integer;
AMaxLoops: integer;
aRequisition: TGtkRequisition;
AAllocation: TGtkAllocation;
begin
Result := Assigned(Widget);
if Result then
begin
if Gtk2WidgetSet.compositeManagerRunning then
AMaxLoops := 200000
else
AMaxLoops := 20000;
{$IFDEF DEBUGGTK2FRAMESIZE}
writeln('ShowDummyWidget(start) WindowManager="',Gtk2WidgetSet.GetWindowManager,'" Compositing enabled="',Gtk2WidgetSet.compositeManagerRunning,'" IsWayland="UNKNOWN" MaxLoops=',AMaxLoops);
ATicks := GetTickCount64;
{$ENDIF}
if (ALeft <= 0) or (ATop <= 0) or (AWidth <= 0) or (AHeight <= 0) then
begin
gdk_screen_get_monitor_geometry(gdk_screen_get_default, 0, @R);
aRequisition.width := 75;
aRequisition.height := 32;
AAllocation.x := R.CenterPoint.x;
AAllocation.y := R.CenterPoint.y;
AAllocation.width := aRequisition.Width;
AAllocation.height := aRequisition.height;
gtk_widget_size_allocate(Widget,@AAllocation);
end else
begin
aRequisition.width := AWidth - 1;
aRequisition.height := AHeight - 1;
AAllocation.x := ALeft + 1;
AAllocation.y := ATop + 1;
AAllocation.width := aRequisition.Width;
AAllocation.height := aRequisition.height;
gtk_widget_size_allocate(Widget,@AAllocation);
end;
gtk_widget_show(Widget);
gtk_widget_map(Widget);
gtk_window_move(PGtkWindow(Widget), AAllocation.x, AAllocation.y);
gtk_window_resize(PGtkWindow(Widget), AAllocation.width, AAllocation.height);
{We are waiting until dummy window is laid out on screen by window manager
ALoop variable is needed to avoid infinite loop.
Usually we get result in about 20-30msec on modern X11 without compositing,
but 30-100 msec on wm with compositing enabled.
Older X11 or slower machine might need more loops to get result,
but it won't be over 200 msec in any case.}
ALoop := 0; // avoid infinite loop
while not GDK_IS_WINDOW(Widget^.window) do
begin
inc(ALoop);
while g_main_context_pending(g_main_context_default) do
begin
if not g_main_context_iteration(g_main_context_default, False) then
break;
end;
if ALoop > AMaxLoops then
break;
end;
{$IFDEF DEBUGGTK2FRAMESIZE}
writeln('ShowDummyWidget: 1st LOOP=',ALoop);
{$ENDIF}
ALoop := 0; // avoid infinite loop
while not FFirstPaintEvent do
begin
inc(ALoop);
while g_main_context_pending(g_main_context_default) do
begin
if not g_main_context_iteration(g_main_context_default, False) then
break;
end;
if ALoop > AMaxLoops then
break;
end;
{$IFDEF DEBUGGTK2FRAMESIZE}
writeln('ShowDummyWidget: 2st LOOP=',ALoop);
{$ENDIF}
R := Rect(0 ,0, 0, 0);
ALoop := 0; // avoid infinite loop
// now wait until R.Top > 0
while (R.Top <= 0) do //
begin
inc(ALoop);
R := GetWidgetFrame;
while g_main_context_pending(g_main_context_default) do
begin
if not g_main_context_iteration(g_main_context_default, False) then
break;
end;
if ALoop > AMaxLoops then
break;
end;
{$IFDEF DEBUGGTK2FRAMESIZE}
writeln('ShowDummyWidget: 3nd LOOP=',ALoop,' LAST R=',dbgs(R));
writeln('ShowDummyWidget: *finished* FRAME=',dbgs(GetWidgetFrame),' in ',GetTickCount64 - ATicks,' msec ');
{$ENDIF}
end;
end;
destructor TDummyWidget.Destroy;
begin
if Assigned(Widget) then
begin
HideWidget;
gtk_widget_destroy(Widget);
Widget := nil;
end;
inherited Destroy;
end;
function TDummyWidget.GetWidgetFrame: TRect;
var
AFrame, AGeometry: TRect;
DeskX, DeskY, PosX, PosY, AWidth, AHeight: gint;
GRect: TGdkRectangle;
begin
Result := FFrameRect;
if not Assigned(Widget) then
exit;
if not GDK_IS_WINDOW(Widget^.window) then
exit;
if not gdk_window_is_visible(Widget^.window) then
exit;
gdk_window_get_frame_extents(Widget^.window, @GRect);
gdk_window_get_deskrelative_origin(Widget^.window, @DeskX, @DeskY);
AFrame := RectFromGdkRect(GRect);
gtk_window_get_position(PGtkWindow(Widget), @PosX, @PosY);
gtk_window_get_size(PGtkWindow(Widget), @AWidth, @AHeight);
AGeometry := Bounds(PosX, PosY, AWidth, AHeight);
FFrameRect := Rect(DeskX - PosX, DeskY - PosY, (AFrame.Right - AGeometry.Right) - (DeskX - PosX), (AFrame.Bottom - AGeometry.Bottom) - (DeskY - PosY)); // hardcoded just to proove GetWindowRect
if FFrameRect.Top < 0 then
FFrameRect.Top := 0;
Result := FFrameRect;
end;
procedure TDummyWidget.SendToBack;
begin
if Assigned(Widget) then
gtk_window_set_keep_above(PGtkWindow(Widget), True);
end;
procedure TDummyWidget.HideWidget;
begin
if Assigned(Widget) then
gtk_widget_hide(Widget);
end;
{$ENDIF}
{$IFDEF ASSERT_IS_ON}
{$UNDEF ASSERT_IS_ON}
{$C-}

View File

@ -4622,7 +4622,8 @@ begin
+b(rsgtkOptionSync)
+b(rsgtkOptionNoXshm)
+b(rsgtkOptionName)
+b(rsgtkOptionClass);
+b(rsgtkOptionClass)
+b(rsqtOptionDisableAccurateFrame);
end;
{------------------------------------------------------------------------------
@ -6261,6 +6262,9 @@ var
Widget: PGTKWidget;
GRect: TGdkRectangle;
P: TPoint;
AInfo: PWidgetInfo;
AForm: TCustomForm;
R, AFrame: TRect;
begin
Result := 0; // error
if Handle = 0 then
@ -6279,6 +6283,26 @@ begin
Result := 1; // success
end else
begin
{$IFDEF HASX}
AInfo := GetWidgetInfo(Widget);
if (AInfo^.LCLObject is TCustomForm) and not AInfo^.FirstPaint then
begin
AForm := TCustomForm(AInfo^.LCLObject);
if not IsFormDesign(AForm) and (AForm.BorderStyle <> bsNone) and
not (AForm.FormStyle in [fsMDIChild, fsSplash])
and (Gtk2WidgetSet.GetDummyWidgetFrame <> Rect(0, 0, 0, 0)) and
not GDK_IS_WINDOW(Widget^.window) then
begin
R := AForm.BoundsRect;
AFrame := Gtk2WidgetSet.GetDummyWidgetFrame;
// apply frame size to lcl form.
R.Right += AFrame.Left + AFrame.Right;
R.Bottom += AFrame.Top + AFrame.Bottom;
ARect := R; //this is now real size under x11 even on unmapped window :)
exit(-1);
end;
end;
{$ENDIF}
ARect.TopLeft := GetWidgetOrigin(Widget);
if (ARect.Top <> -1) or (ARect.Left <> -1)
or (Widget^.allocation.width <> 1) or (Widget^.allocation.height <> 1) then
@ -9679,11 +9703,21 @@ end;
function TGtk2WidgetSet.SystemParametersInfo(uiAction: DWord; uiParam: DWord;
pvParam: Pointer; fWinIni: DWord): LongBool;
{$IFDEF HASX}
var
ax, ay, awidth, aheight: gint;
{$ENDIF}
begin
Result:=True;
Case uiAction of
SPI_GETWHEELSCROLLLINES: PDword(pvParam)^ := 3;
SPI_GETWORKAREA: begin
SPI_GETWORKAREA:
begin
{$IFDEF HASX}
if XGetWorkarea(ax, ay, awidth, aheight) <> -1 then
TRect(pvParam^) := Bounds(ax, ay, awidth, aheight)
else
{$ENDIF}
TRect(pvParam^):=Bounds(GetSystemMetrics(SM_XVIRTUALSCREEN),
GetSystemMetrics(SM_YVIRTUALSCREEN),
GetSystemMetrics(SM_CXVIRTUALSCREEN),

View File

@ -417,6 +417,10 @@ begin
P := gtk_hbox_new(false, 0);
end;
if (AWinControl = Application.MainForm) and
not Application.HasOption('disableaccurateframe') then
Gtk2WidgetSet.CreateDummyWidgetFrame(-1, -1, -1, -1);
WidgetInfo := CreateWidgetInfo(P, AWinControl, AParams);
WidgetInfo^.FormBorderStyle := Ord(ABorderStyle);

View File

@ -979,7 +979,7 @@ msgid "Purple"
msgstr ""
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -951,7 +951,7 @@ msgid "Purple"
msgstr "Fialová"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -951,7 +951,7 @@ msgid "Purple"
msgstr "Purpur"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -950,7 +950,7 @@ msgid "Purple"
msgstr "Púrpura"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -947,7 +947,7 @@ msgid "Purple"
msgstr "Purppura"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -949,7 +949,7 @@ msgid "Purple"
msgstr "Violet"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -973,7 +973,7 @@ msgid "Purple"
msgstr "סגול"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -949,7 +949,7 @@ msgid "Purple"
msgstr "Lila"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -980,7 +980,7 @@ msgid "Purple"
msgstr ""
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -953,7 +953,7 @@ msgid "Purple"
msgstr "Viola"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -950,7 +950,7 @@ msgid "Purple"
msgstr "紫色"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -952,7 +952,7 @@ msgid "Purple"
msgstr "Purpurinė"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -956,7 +956,7 @@ msgid "Purple"
msgstr "Paars"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -982,7 +982,7 @@ msgid "Purple"
msgstr ""
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -950,7 +950,7 @@ msgid "Purple"
msgstr "Fioletowy"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -942,7 +942,7 @@ msgid "Purple"
msgstr ""
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -961,7 +961,7 @@ msgid "Purple"
msgstr "Roxo"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -949,7 +949,7 @@ msgid "Purple"
msgstr "Roxo"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -949,7 +949,9 @@ msgid "Purple"
msgstr "Лиловый"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
#, fuzzy
#| msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr "-disableaccurateframe, отключает определение точных границ окна в X11. Эта возможность реализована для интерфейсов Qt и Qt5 и используется преимущественно GetWindowRect()."
#: lclstrconsts.rsqtoptiondograb

View File

@ -951,7 +951,7 @@ msgid "Purple"
msgstr "Fialová"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -949,7 +949,7 @@ msgid "Purple"
msgstr "Mor"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -952,7 +952,7 @@ msgid "Purple"
msgstr "Пурпуровий"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -951,7 +951,7 @@ msgid "Purple"
msgstr "紫色"
#: lclstrconsts.rsqtoptiondisableaccurateframe
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt and Qt5 interfaces and used mostly by GetWindowRect()."
msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()."
msgstr ""
#: lclstrconsts.rsqtoptiondograb

View File

@ -205,7 +205,7 @@ resourceString
+'floating over the widget and is not inserted until the editing is done.';
rsqtOptionDisableAccurateFrame = '-disableaccurateframe, disables fully accurate '
+'window frame under X11. This feature is implemented for Qt and Qt5 interfaces '
+'window frame under X11. This feature is implemented for Qt,Qt5 and Gtk2 interfaces '
+'and used mostly by GetWindowRect().';
// win32 interface