mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 20:59:06 +02:00
Merge branch 'gtk1-fix-menu-drawing' into 'main'
LCL-GTK1: Fix menu item drawing for menus without icons See merge request freepascal.org/lazarus/lazarus!254
This commit is contained in:
commit
de4dd6bb5d
@ -403,7 +403,6 @@ begin
|
|||||||
LCLMenuItem := TMenuItem(AData);
|
LCLMenuItem := TMenuItem(AData);
|
||||||
// some sanity checks
|
// some sanity checks
|
||||||
if LCLMenuItem = nil then Exit;
|
if LCLMenuItem = nil then Exit;
|
||||||
if not LCLMenuItem.IsCheckItem then Exit; // ???
|
|
||||||
|
|
||||||
// the gtk always toggles the check flag
|
// the gtk always toggles the check flag
|
||||||
// -> restore 'checked' flag if needed
|
// -> restore 'checked' flag if needed
|
||||||
|
@ -361,7 +361,6 @@ type
|
|||||||
const
|
const
|
||||||
OldCheckMenuItemDrawProc: TCheckMenuItemDrawProc = nil;
|
OldCheckMenuItemDrawProc: TCheckMenuItemDrawProc = nil;
|
||||||
OldMenuSizeRequestProc: TMenuSizeRequestProc = nil;
|
OldMenuSizeRequestProc: TMenuSizeRequestProc = nil;
|
||||||
OldCheckMenuItemToggleSize: integer = 0;
|
|
||||||
|
|
||||||
|
|
||||||
{ Accelerators }
|
{ Accelerators }
|
||||||
|
@ -5964,7 +5964,7 @@ begin
|
|||||||
MenuItem:=PGtkMenuItem(ListItem^.Data);
|
MenuItem:=PGtkMenuItem(ListItem^.Data);
|
||||||
if GTK_IS_CHECK_MENU_ITEM(PGtkWidget(MenuItem)) then begin
|
if GTK_IS_CHECK_MENU_ITEM(PGtkWidget(MenuItem)) then begin
|
||||||
CheckMenuItem:=MenuItem;
|
CheckMenuItem:=MenuItem;
|
||||||
CurToggleSize:=OldCheckMenuItemToggleSize;
|
CurToggleSize:=1;
|
||||||
LCLMenuItem:=TMenuItem(GetLCLObject(MenuItem));
|
LCLMenuItem:=TMenuItem(GetLCLObject(MenuItem));
|
||||||
if LCLMenuItem<>nil then begin
|
if LCLMenuItem<>nil then begin
|
||||||
IconSize:=LCLMenuItem.GetIconSize(0);
|
IconSize:=LCLMenuItem.GetIconSize(0);
|
||||||
@ -6113,11 +6113,6 @@ var
|
|||||||
bm_show_toggle_indicator;
|
bm_show_toggle_indicator;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
// set our own draw handler
|
|
||||||
if OldCheckMenuItemDrawProc = nil then
|
|
||||||
OldCheckMenuItemDrawProc := CHECK_MENU_ITEM_CLASS(MenuItemWidget)^.draw_indicator;
|
|
||||||
CHECK_MENU_ITEM_CLASS(MenuItemWidget)^.draw_indicator := @DrawMenuItemIcon;
|
|
||||||
|
|
||||||
{$IFNDEF Gtk2}
|
{$IFNDEF Gtk2}
|
||||||
// add a dummy widget for the icon height
|
// add a dummy widget for the icon height
|
||||||
MinHeightWidget := gtk_label_new('');
|
MinHeightWidget := gtk_label_new('');
|
||||||
|
@ -170,15 +170,23 @@ begin
|
|||||||
|
|
||||||
if GtkWidgetIsA(Widget, GTK_TYPE_CHECK_MENU_ITEM) then
|
if GtkWidgetIsA(Widget, GTK_TYPE_CHECK_MENU_ITEM) then
|
||||||
begin
|
begin
|
||||||
// set 'ShowAlwaysCheckable'
|
// set 'ShowAlwaysCheckable' (this modifies the always_show_toggle bitfield
|
||||||
gtk_check_menu_item_set_show_toggle(PGtkCheckMenuItem(Widget),
|
// in the private _GtkCheckMenuItem - it used to be modifiable by a function
|
||||||
AMenuItem.ShowAlwaysCheckable);
|
// call but in Gtk 1.2.9 and 1.2.10 it became a noop, however aside from
|
||||||
|
// that the rest of the code didn't change
|
||||||
|
if AMenuItem.ShowAlwaysCheckable then
|
||||||
|
PGtkCheckMenuItem(Widget)^.flag0:=PGtkCheckMenuItem(Widget)^.flag0 or 2
|
||||||
|
else
|
||||||
|
PGtkCheckMenuItem(Widget)^.flag0:=PGtkCheckMenuItem(Widget)^.flag0 and not 2;
|
||||||
// set 'Checked'
|
// set 'Checked'
|
||||||
gtk_check_menu_item_set_active(PGtkCheckMenuItem(Widget),
|
gtk_check_menu_item_set_active(PGtkCheckMenuItem(Widget),
|
||||||
AMenuItem.Checked);
|
AMenuItem.Checked);
|
||||||
|
|
||||||
if (OldCheckMenuItemToggleSize=0) then
|
// always set our own indicator draw handler to ensure the check box is not
|
||||||
OldCheckMenuItemToggleSize := MENU_ITEM_CLASS(Widget)^.toggle_size;
|
// drawn for non-checkable menu items
|
||||||
|
if OldCheckMenuItemDrawProc = nil then
|
||||||
|
OldCheckMenuItemDrawProc := CHECK_MENU_ITEM_CLASS(Widget)^.draw_indicator;
|
||||||
|
CHECK_MENU_ITEM_CLASS(Widget)^.draw_indicator := @DrawMenuItemIcon;
|
||||||
|
|
||||||
g_signal_connect_after(PGTKObject(Widget), 'toggled',
|
g_signal_connect_after(PGTKObject(Widget), 'toggled',
|
||||||
TGTKSignalFunc(@GTKCheckMenuToggeledCB), Pointer(AMenuItem));
|
TGTKSignalFunc(@GTKCheckMenuToggeledCB), Pointer(AMenuItem));
|
||||||
|
Loading…
Reference in New Issue
Block a user