mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 18:39:10 +02:00
LCL-GTK2: Fix SpeedButton freeze after closing system popup menu without choosing menu item. Issue #38402, patch from Andrzej Kilijanski.
git-svn-id: trunk@64431 -
This commit is contained in:
parent
5a0bf2ed29
commit
e7986013cc
@ -108,6 +108,9 @@ begin
|
|||||||
SignalConnect(AWidgetInfo^.CoreWidget, 'cut-clipboard', @Gtk2WS_MemoCutToClip, AWidgetInfo);
|
SignalConnect(AWidgetInfo^.CoreWidget, 'cut-clipboard', @Gtk2WS_MemoCutToClip, AWidgetInfo);
|
||||||
SignalConnect(AWidgetInfo^.CoreWidget, 'copy-clipboard', @Gtk2WS_MemoCopyToClip, AWidgetInfo);
|
SignalConnect(AWidgetInfo^.CoreWidget, 'copy-clipboard', @Gtk2WS_MemoCopyToClip, AWidgetInfo);
|
||||||
SignalConnect(AWidgetInfo^.CoreWidget, 'paste-clipboard', @Gtk2WS_MemoPasteFromClip, AWidgetInfo);
|
SignalConnect(AWidgetInfo^.CoreWidget, 'paste-clipboard', @Gtk2WS_MemoPasteFromClip, AWidgetInfo);
|
||||||
|
|
||||||
|
g_signal_connect_after(PGtkObject(AWidgetInfo^.CoreWidget), 'populate-popup',
|
||||||
|
gtk_signal_func(@gtkDefaultPopupMenuCloseFix), AWidgetInfo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TGtk2WSCustomMemo.CreateHandle(const AWinControl: TWinControl;
|
class function TGtk2WSCustomMemo.CreateHandle(const AWinControl: TWinControl;
|
||||||
|
@ -412,6 +412,25 @@ begin
|
|||||||
Result := nil;
|
Result := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure gtkDefaultPopupMenuDeactivate(Widget: PGtkWidget; data: gPointer); cdecl;
|
||||||
|
begin
|
||||||
|
LastMouse.Button := 0;
|
||||||
|
LastMouse.ClickCount := 0;
|
||||||
|
LastMouse.Down := False;
|
||||||
|
LastMouse.MousePos := Point(0, 0);
|
||||||
|
LastMouse.Time := 0;
|
||||||
|
LastMouse.WinControl := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function gtkDefaultPopupMenuCloseFix(Widget: PGtkWidget; Menu: PGtkMenu;
|
||||||
|
data: gPointer): gboolean; cdecl;
|
||||||
|
begin
|
||||||
|
// needed because closing popup menu without clicking on any menu item
|
||||||
|
// freezes various controls, eg SpeedButton
|
||||||
|
g_signal_connect(PGtkObject(Menu), 'deactivate',
|
||||||
|
gtk_signal_func(@gtkDefaultPopupMenuDeactivate), nil);
|
||||||
|
end;
|
||||||
|
|
||||||
{$I gtk2memostrings.inc}
|
{$I gtk2memostrings.inc}
|
||||||
|
|
||||||
{ TGtk2WSCustomListBox }
|
{ TGtk2WSCustomListBox }
|
||||||
@ -1063,6 +1082,9 @@ begin
|
|||||||
SetCallback(LM_COPY, PGtkObject(AGtkWidget), AWidgetInfo^.LCLObject);
|
SetCallback(LM_COPY, PGtkObject(AGtkWidget), AWidgetInfo^.LCLObject);
|
||||||
SetCallback(LM_PASTE, PGtkObject(AGtkWidget), AWidgetInfo^.LCLObject);
|
SetCallback(LM_PASTE, PGtkObject(AGtkWidget), AWidgetInfo^.LCLObject);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
g_signal_connect_after(PGtkObject(AGtkWidget), 'populate-popup',
|
||||||
|
gtk_signal_func(@gtkDefaultPopupMenuCloseFix), AWidgetInfo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class procedure TGtk2WSCustomEdit.GetPreferredSize(const AWinControl: TWinControl;
|
class procedure TGtk2WSCustomEdit.GetPreferredSize(const AWinControl: TWinControl;
|
||||||
@ -1760,6 +1782,9 @@ begin
|
|||||||
g_signal_connect_after(AMenu, 'selection-done', G_CALLBACK(@GtkPopupHideCB), AWidgetInfo);
|
g_signal_connect_after(AMenu, 'selection-done', G_CALLBACK(@GtkPopupHideCB), AWidgetInfo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
g_signal_connect_after(PGtkObject(GTK_BIN(ComboWidget)^.child), 'populate-popup',
|
||||||
|
gtk_signal_func(@gtkDefaultPopupMenuCloseFix), AWidgetInfo);
|
||||||
|
|
||||||
if (gtk_major_version >= 2) and (gtk_minor_version >= 10) then
|
if (gtk_major_version >= 2) and (gtk_minor_version >= 10) then
|
||||||
g_signal_connect(ComboWidget, 'notify', TGCallback(@GtkNotifyCB), AWidgetInfo);
|
g_signal_connect(ComboWidget, 'notify', TGCallback(@GtkNotifyCB), AWidgetInfo);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user