mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-18 23:09:33 +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, 'copy-clipboard', @Gtk2WS_MemoCopyToClip, AWidgetInfo);
|
||||
SignalConnect(AWidgetInfo^.CoreWidget, 'paste-clipboard', @Gtk2WS_MemoPasteFromClip, AWidgetInfo);
|
||||
|
||||
g_signal_connect_after(PGtkObject(AWidgetInfo^.CoreWidget), 'populate-popup',
|
||||
gtk_signal_func(@gtkDefaultPopupMenuCloseFix), AWidgetInfo);
|
||||
end;
|
||||
|
||||
class function TGtk2WSCustomMemo.CreateHandle(const AWinControl: TWinControl;
|
||||
|
@ -412,6 +412,25 @@ begin
|
||||
Result := nil;
|
||||
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}
|
||||
|
||||
{ TGtk2WSCustomListBox }
|
||||
@ -1063,6 +1082,9 @@ begin
|
||||
SetCallback(LM_COPY, PGtkObject(AGtkWidget), AWidgetInfo^.LCLObject);
|
||||
SetCallback(LM_PASTE, PGtkObject(AGtkWidget), AWidgetInfo^.LCLObject);
|
||||
end;
|
||||
|
||||
g_signal_connect_after(PGtkObject(AGtkWidget), 'populate-popup',
|
||||
gtk_signal_func(@gtkDefaultPopupMenuCloseFix), AWidgetInfo);
|
||||
end;
|
||||
|
||||
class procedure TGtk2WSCustomEdit.GetPreferredSize(const AWinControl: TWinControl;
|
||||
@ -1760,6 +1782,9 @@ begin
|
||||
g_signal_connect_after(AMenu, 'selection-done', G_CALLBACK(@GtkPopupHideCB), AWidgetInfo);
|
||||
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
|
||||
g_signal_connect(ComboWidget, 'notify', TGCallback(@GtkNotifyCB), AWidgetInfo);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user