mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-31 05:52:38 +02:00
add more gtk1i<->gtk2 key & event wrappers,
move more GTK2 workarounds from gtk to gtk2 interface, start GTK2 interface SetCallback git-svn-id: trunk@4697 -
This commit is contained in:
parent
f24db7949b
commit
983bc1227d
@ -173,7 +173,6 @@ end;
|
||||
the initialization of a widget.
|
||||
|
||||
-------------------------------------------------------------------------------}
|
||||
|
||||
{$IFDEF CustomFonts}
|
||||
procedure ModifyWidgetStyle(AWinControl: TWinControl; AWidget: PGtkWidget);
|
||||
{$IFDEF Win32}
|
||||
@ -184,6 +183,7 @@ end;
|
||||
var
|
||||
RCStyle: PGtkRcStyle;
|
||||
begin
|
||||
{$IfDef GTK1}
|
||||
{$IFDEF NoStyle}
|
||||
exit;
|
||||
{$ENDIF}
|
||||
@ -198,6 +198,7 @@ end;
|
||||
g_free(RCStyle^.font_name);
|
||||
RCStyle^.font_name:=nil;
|
||||
gtk_rc_style_unref(RCStyle);
|
||||
{$EndIf}
|
||||
end;
|
||||
{$ENDIF not win32}
|
||||
{$ENDIF CustomFonts}
|
||||
@ -275,13 +276,8 @@ end;
|
||||
function gtkshowCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Mess : TLMShowWindow;
|
||||
Status : GBoolean;
|
||||
begin
|
||||
{$ifdef GTK2}
|
||||
Result := False;
|
||||
{$Else}
|
||||
Result := True;
|
||||
{$endif}
|
||||
|
||||
EventTrace('show', data);
|
||||
if Widget=nil then ;
|
||||
@ -289,38 +285,21 @@ begin
|
||||
Mess.Msg := LM_SHOWWINDOW;
|
||||
Mess.Show := True;
|
||||
|
||||
Status := DeliverMessage(Data, Mess) = 0;
|
||||
|
||||
{$ifdef GTK2}
|
||||
Result := False;
|
||||
{$Else}
|
||||
Result := Status;
|
||||
{$endif}
|
||||
Result := DeliverMessage(Data, Mess) = 0;
|
||||
end;
|
||||
|
||||
function gtkHideCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Mess : TLMShowWindow;
|
||||
Status : GBoolean;
|
||||
begin
|
||||
{$ifdef GTK2}
|
||||
Result := False;
|
||||
{$Else}
|
||||
Result := True;
|
||||
{$endif}
|
||||
|
||||
EventTrace('hide', data);
|
||||
if Widget=nil then ;
|
||||
FillChar(Mess,SizeOf(Mess),0);
|
||||
Mess.Msg := LM_SHOWWINDOW;
|
||||
Mess.Show := False;
|
||||
Status := DeliverMessage(Data, Mess) = 0;
|
||||
|
||||
{$ifdef GTK2}
|
||||
Result := False;
|
||||
{$Else}
|
||||
Result := Status;
|
||||
{$endif}
|
||||
Result := DeliverMessage(Data, Mess) = 0;
|
||||
end;
|
||||
|
||||
function gtkactivateCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl;
|
||||
@ -601,27 +580,21 @@ var
|
||||
ShiftState: TShiftState;
|
||||
EventStopped: Boolean;
|
||||
TopLevel: PGtkWidget;
|
||||
Status : GBoolean;
|
||||
|
||||
theString : PPgChar;
|
||||
|
||||
procedure StopKeyEvent(const EventName: PChar);
|
||||
begin
|
||||
if not EventStopped then begin
|
||||
g_signal_stop_emission_by_name (GTK_OBJECT (Widget), EventName);
|
||||
EventStopped:=true;
|
||||
end;
|
||||
gdk_event_key_get_string(Event, theString);
|
||||
If (Msg.CharCode >= 31) or (Msg.CharCode = 0) then begin
|
||||
{$IfNDef Win32}
|
||||
{$IfDef GTK2}
|
||||
If Event^._string <> nil then begin
|
||||
Event^._string[0] := Char(Msg.CharCode);
|
||||
Event^._string[1] := #0;
|
||||
If theString^ <> nil then begin
|
||||
theString^[0] := Char(Msg.CharCode);
|
||||
theString^[1] := #0;
|
||||
end;
|
||||
{$else}
|
||||
If Event^.theString <> nil then begin
|
||||
Event^.theString[0] := Char(Msg.CharCode);
|
||||
Event^.theString[1] := #0;
|
||||
end;
|
||||
{$EndIf}
|
||||
{$EndIf}
|
||||
Event^.KeyVal := Msg.CharCode;
|
||||
If Msg.CharCode <> VK_UNKNOWN then
|
||||
@ -635,7 +608,7 @@ var
|
||||
end;
|
||||
|
||||
begin
|
||||
Status := true;
|
||||
Result := true;
|
||||
|
||||
EventStopped:=false;
|
||||
|
||||
@ -650,11 +623,7 @@ begin
|
||||
|
||||
//writeln('[GTKKeyUpDown] ',TControl(Data).Name,':',TControl(Data).ClassName,' ',Event^.theType);
|
||||
|
||||
{$ifdef GTK2}
|
||||
case Event^._Type of
|
||||
{$else}
|
||||
case Event^.theType of
|
||||
{$endif}
|
||||
case gdk_event_get_type(Event) of
|
||||
GDK_KEY_RELEASE:
|
||||
begin
|
||||
{writeln('[GTKKeyUpDown] RELEASE ',TControl(Data).Name,':',TControl(Data).ClassName,
|
||||
@ -673,7 +642,7 @@ begin
|
||||
Msg.Result:=0;
|
||||
Code := Msg.CharCode;
|
||||
NotifyApplicationUserInput(Msg.Msg);
|
||||
Status := DeliverMessage(Data, Msg)=0;
|
||||
Result := DeliverMessage(Data, Msg)=0;
|
||||
|
||||
If Msg.CharCode <> Code then begin
|
||||
// key was handled by LCL
|
||||
@ -708,7 +677,7 @@ begin
|
||||
// send the message directly to the LCL
|
||||
NotifyApplicationUserInput(Msg.Msg);
|
||||
//writeln('GTKKeyUpDown Key Send to ',TControl(Data).Name,':',TControl(Data).ClassName,' ',Code=VK_TAB);
|
||||
status := DeliverMessage(Data, Msg)=0;
|
||||
Result := DeliverMessage(Data, Msg)=0;
|
||||
|
||||
If Msg.CharCode <> Code then begin
|
||||
// key was changed by LCL
|
||||
@ -728,7 +697,7 @@ begin
|
||||
Msg.CharCode := KeyCode;
|
||||
Msg.Result:=0;
|
||||
// send the message directly (not queued) to the LCL
|
||||
status:=DeliverMessage(Data, Msg)=0;
|
||||
Result:=DeliverMessage(Data, Msg)=0;
|
||||
If Msg.CharCode <> KeyCode then begin
|
||||
// key was handled by lcl
|
||||
//writeln('GTKKeyUpDown Key CHANGED 2 ',TControl(Data).Name,':',TControl(Data).ClassName);
|
||||
@ -744,14 +713,11 @@ begin
|
||||
and (PGtkWindow(TopLevel)^.focus_widget=Widget) then begin
|
||||
StopKeyEvent('key_press_event');
|
||||
//writeln('GTKKeyUpDown ',TControl(Data).Name,':',TControl(Data).ClassName);
|
||||
Status:=TControl(Data).PerformTab(not (ssShift in ShiftState));
|
||||
If Status then begin
|
||||
Result:=TControl(Data).PerformTab(not (ssShift in ShiftState));
|
||||
If Result then begin
|
||||
{$IfNDef Win32}
|
||||
{$ifdef GTK2}
|
||||
Event^._String[0] := #0;
|
||||
{$else}
|
||||
Event^.theString[0] := #0;
|
||||
{$EndIf}
|
||||
gdk_event_key_get_string(Event, theString);
|
||||
theString^[0] := #0;
|
||||
{$EndIf}
|
||||
Event^.KeyVal := 0;
|
||||
end;
|
||||
@ -760,13 +726,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
//writeln('AAA1 [GTKKeyUpDown] ',TControl(Data).Name,':',TControl(Data).ClassName,' Result=',Result);
|
||||
|
||||
{$ifdef GTK2}
|
||||
if not GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) then
|
||||
Status := False;//for now only handle custom widgets
|
||||
{$endif}
|
||||
|
||||
Result := Status;
|
||||
end;
|
||||
|
||||
function GTKFocusCB( widget: PGtkWidget; event:PGdkEventFocus;
|
||||
@ -809,11 +768,7 @@ begin
|
||||
writeln('');
|
||||
{$ENDIF}
|
||||
|
||||
{$IfDef GTK2}
|
||||
Result:=False;
|
||||
{$Else}
|
||||
Result:=true;
|
||||
{$EndIF}
|
||||
end;
|
||||
|
||||
function GTKFocusCBAfter(widget: PGtkWidget; event:PGdkEventFocus;
|
||||
@ -863,11 +818,7 @@ begin
|
||||
Assert(False, Format('Trace:TODO: [gtkfocusCB] %s finish', [TObject(Data).ClassName]));
|
||||
DeliverMessage(Data, Mess);
|
||||
|
||||
{$IfDef GTK2}
|
||||
Result:=False;
|
||||
{$Else}
|
||||
Result:=true;
|
||||
{$EndIF}
|
||||
end;
|
||||
|
||||
function GTKKillFocusCB(widget: PGtkWidget; event:PGdkEventFocus;
|
||||
@ -910,11 +861,7 @@ begin
|
||||
writeln('');
|
||||
{$ENDIF}
|
||||
|
||||
{$IfDef GTK2}
|
||||
Result:=False;
|
||||
{$Else}
|
||||
Result:=true;
|
||||
{$EndIF}
|
||||
end;
|
||||
|
||||
function GTKKillFocusCBAfter(widget: PGtkWidget; event:PGdkEventFocus;
|
||||
@ -964,11 +911,7 @@ begin
|
||||
Assert(False, Format('Trace:TODO: [gtkkillfocusCB] %s finish', [TObject(Data).ClassName]));
|
||||
DeliverMessage(Data, Mess);
|
||||
|
||||
{$IfDef GTK2}
|
||||
Result:=False;
|
||||
{$Else}
|
||||
Result:=true;
|
||||
{$EndIF}
|
||||
end;
|
||||
|
||||
function gtkdestroyCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl;
|
||||
@ -1268,8 +1211,7 @@ var
|
||||
|
||||
|
||||
if (LastMouse.Down) and
|
||||
(not (Event^.{$ifdef GTK2}_Type{$ELSE}theType{$ENDIF}
|
||||
in [gdk_2button_press,gdk_3button_press]))
|
||||
(not (gdk_event_get_type(Event) in [gdk_2button_press,gdk_3button_press]))
|
||||
then begin
|
||||
{$IFDEF VerboseMouseBugfix}
|
||||
writeln(' NO CLICK: LastMouse.Down=',LastMouse.Down,
|
||||
@ -1282,12 +1224,8 @@ var
|
||||
|
||||
IsMultiClick:=TestIfMultiClick;
|
||||
|
||||
{$ifdef GTK2}
|
||||
case Event^._Type of
|
||||
{$ELSE}
|
||||
case Event^.theType of
|
||||
{$ENDIF}
|
||||
|
||||
case gdk_event_get_type(Event) of
|
||||
|
||||
gdk_2button_press:
|
||||
// the gtk itself has detected a double click
|
||||
if (LastMouse.ClickCount>=2)
|
||||
@ -2006,15 +1944,11 @@ begin
|
||||
Result:=false;
|
||||
|
||||
if (Widget=nil) then ;
|
||||
{$ifdef GTK2}
|
||||
case Event^._Type of
|
||||
{$else}
|
||||
case Event^.theType of
|
||||
{$endif}
|
||||
|
||||
case gdk_event_get_type(Event) of
|
||||
|
||||
GDK_KEY_RELEASE, GDK_KEY_PRESS:
|
||||
begin
|
||||
if Event^.KeyVal={$ifdef GTK2}GDK_KEY_Escape{$else}GDK_Escape{$EndIf}
|
||||
if Event^.KeyVal=GDK_KEY_Escape
|
||||
then begin
|
||||
StoreCommonDialogSetup(TCommonDialog(data));
|
||||
TCommonDialog(data).UserChoice:=mrCancel;
|
||||
@ -2880,17 +2814,10 @@ var
|
||||
begin
|
||||
if VirtKeyCode<>ListCode then
|
||||
UpdateExtraKeyState(ListCode,Pressed)
|
||||
{$ifdef GTK2}
|
||||
else if Event^._Type=GDK_KEY_PRESS then
|
||||
else if gdk_event_get_type(Event)=GDK_KEY_PRESS then
|
||||
UpdateExtraKeyState(ListCode,true)
|
||||
else if Event^._Type=GDK_KEY_RELEASE then
|
||||
else if gdk_event_get_type(Event)=GDK_KEY_RELEASE then
|
||||
UpdateExtraKeyState(ListCode,false);
|
||||
{$else}
|
||||
else if Event^.theType=GDK_KEY_PRESS then
|
||||
UpdateExtraKeyState(ListCode,true)
|
||||
else if Event^.theType=GDK_KEY_RELEASE then
|
||||
UpdateExtraKeyState(ListCode,false);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
begin
|
||||
@ -2904,11 +2831,7 @@ begin
|
||||
CheckExtraKeyState(VK_SHIFT,ssShift in ShiftState);
|
||||
CheckExtraKeyState(VK_MENU,ssAlt in ShiftState);
|
||||
|
||||
{$ifdef GTK2}
|
||||
case Event^._Type of
|
||||
{$else}
|
||||
case Event^.theType of
|
||||
{$endif}
|
||||
case gdk_event_get_type(Event) of
|
||||
GDK_KEY_PRESS:
|
||||
begin
|
||||
if KeyStateList.IndexOf(Pointer(ListCode)) <0
|
||||
@ -2930,8 +2853,7 @@ begin
|
||||
KeyStateList.Remove(Pointer(ListCode or KEYMAP_TOGGLE));
|
||||
end;
|
||||
else
|
||||
WriteLn(Format('ERROR: [GTKKeySnooper] Got unknown event %d',[
|
||||
{$ifdef GTK2}Event^._Type{$else}Event^.theType{$endif}]));
|
||||
WriteLn(Format('ERROR: [GTKKeySnooper] Got unknown event %d',[gdk_event_get_type(Event)]));
|
||||
end;
|
||||
Result := 0;
|
||||
end;
|
||||
@ -3185,6 +3107,11 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.201 2003/10/03 01:25:01 ajgenius
|
||||
add more gtk1i<->gtk2 key & event wrappers,
|
||||
move more GTK2 workarounds from gtk to gtk2 interface,
|
||||
start GTK2 interface SetCallback
|
||||
|
||||
Revision 1.200 2003/10/02 03:35:29 ajgenius
|
||||
more fixes for GTK2, synedit now mostly-useable
|
||||
|
||||
|
@ -64,6 +64,24 @@ begin
|
||||
result := gtk_widget_get_ythickness(gtk_widget_get_style(Style));
|
||||
end;
|
||||
|
||||
procedure gdk_event_key_get_string(Event : PGDKEventKey; var theString : PPgchar);
|
||||
begin
|
||||
{$IfDef GTK2}
|
||||
theString := @Event^._String;
|
||||
{$Else}
|
||||
theString := @Event^.TheString;
|
||||
{$EndIF}
|
||||
end;
|
||||
|
||||
function gdk_event_get_type(Event : Pointer) : guint;
|
||||
begin
|
||||
{$IfDef GTK2}
|
||||
result := PGdkEvent(Event)^._type;
|
||||
{$Else}
|
||||
result := PGdkEvent(Event)^.TheType;
|
||||
{$EndIF}
|
||||
end;
|
||||
|
||||
{$Ifdef GTK1}
|
||||
function gtk_class_get_type(aclass : Pointer) : TGtkType;
|
||||
begin
|
||||
@ -1275,200 +1293,192 @@ begin
|
||||
Dec(KeyCode, Ord('@'));
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_key_dead_circumflex{$else}GDK_dead_circumflex{$EndIf}:
|
||||
GDK_key_dead_circumflex:
|
||||
begin
|
||||
KeyCode := Ord('^');
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_Space{$else}GDK_KP_Space{$EndIf}:
|
||||
GDK_KEY_KP_Space:
|
||||
begin
|
||||
KeyCode := VK_SPACE;
|
||||
VirtualKey := VK_SPACE;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_ENTER{$else}GDK_KP_ENTER{$EndIf}:
|
||||
GDK_KEY_KP_ENTER:
|
||||
begin
|
||||
KeyCode := VK_Return;
|
||||
VirtualKey := VK_Return;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}
|
||||
GDK_KEY_Tab, GDK_KEY_ISO_Left_Tab, GDK_KEY_KP_Tab
|
||||
{$else}
|
||||
GDK_Tab, GDK_ISO_Left_Tab, GDK_KP_Tab
|
||||
{$EndIf}:
|
||||
GDK_KEY_Tab, GDK_KEY_ISO_Left_Tab, GDK_KEY_KP_Tab:
|
||||
begin
|
||||
KeyCode := VK_TAB;
|
||||
VirtualKey := VK_TAB;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_RETURN{$else}GDK_Return{$EndIf}:
|
||||
GDK_KEY_RETURN:
|
||||
begin
|
||||
KeyCode := VK_RETURN;
|
||||
VirtualKey := VK_RETURN;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_LINEFEED{$else}GDK_LINEFEED{$EndIf}:
|
||||
GDK_KEY_LINEFEED:
|
||||
begin
|
||||
KeyCode := $0A;
|
||||
VirtualKey := $0A;
|
||||
end;
|
||||
|
||||
// Cursor block / keypad
|
||||
{$ifdef GTK2}GDK_KEY_INSERT{$else}GDK_INSERT{$EndIf}:
|
||||
GDK_KEY_INSERT:
|
||||
begin
|
||||
VirtualKey := VK_INSERT;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_HOME{$else}GDK_HOME{$EndIf}:
|
||||
GDK_KEY_HOME:
|
||||
begin
|
||||
VirtualKey := VK_HOME;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_LEFT{$else}GDK_LEFT{$EndIf}:
|
||||
GDK_KEY_LEFT:
|
||||
begin
|
||||
VirtualKey := VK_LEFT;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_UP{$else}GDK_UP{$EndIf}:
|
||||
GDK_KEY_UP:
|
||||
begin
|
||||
VirtualKey := VK_UP;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_RIGHT{$else}GDK_RIGHT{$EndIf}:
|
||||
GDK_KEY_RIGHT:
|
||||
begin
|
||||
VirtualKey := VK_RIGHT;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_DOWN{$else}GDK_DOWN{$EndIf}:
|
||||
GDK_KEY_DOWN:
|
||||
begin
|
||||
VirtualKey := VK_DOWN;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_Page_Up{$else}GDK_Page_Up{$EndIf}:
|
||||
GDK_KEY_Page_Up:
|
||||
begin
|
||||
VirtualKey := VK_PRIOR;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_Page_Down{$else}GDK_Page_Down{$EndIf}:
|
||||
GDK_KEY_Page_Down:
|
||||
begin
|
||||
VirtualKey := VK_NEXT;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_End{$else}GDK_End{$EndIf}:
|
||||
GDK_KEY_End:
|
||||
begin
|
||||
VirtualKey := VK_END;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_INSERT{$else}GDK_KP_INSERT{$EndIf}:
|
||||
GDK_KEY_KP_INSERT:
|
||||
VirtualKey := VK_INSERT;
|
||||
{$ifdef GTK2}GDK_KEY_KP_HOME{$else}GDK_KP_HOME{$EndIf}:
|
||||
GDK_KEY_KP_HOME:
|
||||
VirtualKey := VK_HOME;
|
||||
{$ifdef GTK2}GDK_KEY_KP_LEFT{$else}GDK_KP_LEFT{$EndIf}:
|
||||
GDK_KEY_KP_LEFT:
|
||||
VirtualKey := VK_LEFT;
|
||||
{$ifdef GTK2}GDK_KEY_KP_UP{$else}GDK_KP_UP{$EndIf}:
|
||||
GDK_KEY_KP_UP:
|
||||
VirtualKey := VK_UP;
|
||||
{$ifdef GTK2}GDK_KEY_KP_RIGHT{$else}GDK_KP_RIGHT{$EndIf}:
|
||||
GDK_KEY_KP_RIGHT:
|
||||
VirtualKey := VK_RIGHT;
|
||||
{$ifdef GTK2}GDK_KEY_KP_DOWN{$else}GDK_KP_DOWN{$EndIf}:
|
||||
GDK_KEY_KP_DOWN:
|
||||
VirtualKey := VK_DOWN;
|
||||
{$ifdef GTK2}GDK_KEY_KP_PAGE_UP{$else}GDK_KP_PAGE_UP{$EndIf}:
|
||||
GDK_KEY_KP_PAGE_UP:
|
||||
VirtualKey := VK_PRIOR;
|
||||
{$ifdef GTK2}GDK_KEY_KP_PAGE_DOWN{$else}GDK_KP_PAGE_DOWN{$EndIf}:
|
||||
GDK_KEY_KP_PAGE_DOWN:
|
||||
VirtualKey := VK_NEXT;
|
||||
{$ifdef GTK2}GDK_KEY_KP_END{$else}GDK_KP_END{$EndIf}:
|
||||
GDK_KEY_KP_END:
|
||||
VirtualKey := VK_END;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_Num_Lock{$else}GDK_Num_Lock{$EndIf}:
|
||||
GDK_KEY_Num_Lock:
|
||||
VirtualKey := VK_NUMLOCK;
|
||||
{$ifdef GTK2}GDK_KEY_KP_F1{$else}GDK_KP_F1{$EndIf}:
|
||||
GDK_KEY_KP_F1:
|
||||
VirtualKey := VK_F1;
|
||||
{$ifdef GTK2}GDK_KEY_KP_F2{$else}GDK_KP_F2{$EndIf}:
|
||||
GDK_KEY_KP_F2:
|
||||
VirtualKey := VK_F2;
|
||||
{$ifdef GTK2}GDK_KEY_KP_F3{$else}GDK_KP_F3{$EndIf}:
|
||||
GDK_KEY_KP_F3:
|
||||
VirtualKey := VK_F3;
|
||||
{$ifdef GTK2}GDK_KEY_KP_F4{$else}GDK_KP_F4{$EndIf}:
|
||||
GDK_KEY_KP_F4:
|
||||
VirtualKey := VK_F4;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_EQUAL{$else}GDK_KP_EQUAL{$EndIf}:
|
||||
GDK_KEY_KP_EQUAL:
|
||||
begin
|
||||
VirtualKey := VK_EQUAL;
|
||||
if not (ssCtrl in ShiftState) then KeyCode := Ord('=');
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_Multiply{$else}GDK_KP_Multiply{$EndIf}:
|
||||
GDK_KEY_KP_Multiply:
|
||||
begin
|
||||
VirtualKey := VK_MULTIPLY;
|
||||
if not (ssCtrl in ShiftState) then KeyCode := Ord('*');
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_Add{$else}GDK_KP_Add{$EndIf}:
|
||||
GDK_KEY_KP_Add:
|
||||
begin
|
||||
VirtualKey := VK_ADD;
|
||||
if not (ssCtrl in ShiftState) then KeyCode := Ord('+');
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_Separator{$else}GDK_KP_Separator{$EndIf}:
|
||||
GDK_KEY_KP_Separator:
|
||||
begin
|
||||
VirtualKey := VK_SEPARATOR;
|
||||
// if not CtrlDown then KeyCode := Ord('????');
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_Subtract{$else}GDK_KP_Subtract{$EndIf}:
|
||||
GDK_KEY_KP_Subtract:
|
||||
begin
|
||||
VirtualKey := VK_SUBTRACT;
|
||||
if not (ssCtrl in ShiftState) then KeyCode := Ord('-');
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_Decimal{$else}GDK_KP_Decimal{$EndIf}:
|
||||
GDK_KEY_KP_Decimal:
|
||||
begin
|
||||
VirtualKey := VK_DECIMAL;
|
||||
if not (ssCtrl in ShiftState) then KeyCode := Ord('.');
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_KP_Divide{$else}GDK_KP_Divide{$EndIf}:
|
||||
GDK_KEY_KP_Divide:
|
||||
begin
|
||||
VirtualKey := VK_DIVIDE;
|
||||
Extended := True;
|
||||
if not (ssCtrl in ShiftState) then KeyCode := Ord('/');
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}
|
||||
GDK_KEY_KP_0..GDK_KEY_KP_9
|
||||
{$else}
|
||||
GDK_KP_0..GDK_KP_9
|
||||
{$EndIf}:
|
||||
GDK_KEY_KP_0..GDK_KEY_KP_9:
|
||||
begin
|
||||
VirtualKey := VK_NUMPAD0 + (Event^.KeyVal -
|
||||
{$ifdef GTK2}GDK_KEY_KP_0{$else}GDK_KP_0{$EndIf});
|
||||
GDK_KEY_KP_0);
|
||||
if not (ssCtrl in ShiftState) then
|
||||
KeyCode := Ord('0') + (Event^.KeyVal -
|
||||
{$ifdef GTK2}GDK_KEY_KP_0{$else}GDK_KP_0{$EndIf});
|
||||
GDK_KEY_KP_0);
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_BackSpace{$else}GDK_BackSpace{$EndIf}:
|
||||
GDK_KEY_BackSpace:
|
||||
VirtualKey := VK_BACK;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_Clear{$else}GDK_Clear_Key{$EndIf}:
|
||||
GDK_KEY_Clear:
|
||||
VirtualKey := VK_CLEAR;
|
||||
{$ifdef GTK2}GDK_KEY_Pause{$else}GDK_Pause{$EndIf}:
|
||||
GDK_KEY_Pause:
|
||||
VirtualKey := VK_PAUSE;
|
||||
{$ifdef GTK2}GDK_KEY_Scroll_Lock{$else}GDK_Scroll_Lock{$EndIf}:
|
||||
GDK_KEY_Scroll_Lock:
|
||||
VirtualKey := VK_SCROLL;
|
||||
{$ifdef GTK2}GDK_KEY_Sys_Req{$else}GDK_Sys_Req{$EndIf}:
|
||||
GDK_KEY_Sys_Req:
|
||||
VirtualKey := VK_SNAPSHOT;
|
||||
{$ifdef GTK2}GDK_KEY_Escape{$else}GDK_Escape{$EndIf}:
|
||||
GDK_KEY_Escape:
|
||||
VirtualKey := VK_ESCAPE;
|
||||
{$ifdef GTK2}GDK_KEY_Delete{$else}GDK_Delete_Key{$EndIf}:
|
||||
GDK_KEY_Delete:
|
||||
VirtualKey := VK_DELETE;
|
||||
|
||||
// GDK_Multi_key = $FF20;
|
||||
@ -1476,7 +1486,7 @@ begin
|
||||
// GDK_MultipleCandidate = $FF3D;
|
||||
// GDK_PreviousCandidate = $FF3E;
|
||||
|
||||
{$ifdef GTK2}GDK_KEY_Kanji{$else}GDK_Kanji{$EndIf}:
|
||||
GDK_KEY_Kanji:
|
||||
VirtualKey := VK_KANJI;
|
||||
|
||||
// GDK_Muhenkan = $FF22;
|
||||
@ -1498,59 +1508,59 @@ begin
|
||||
// GDK_Zen_Koho = $FF3D;
|
||||
// GDK_Mae_Koho = $FF3E;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Select{$else}GDK_Select{$EndIf}:
|
||||
GDK_KEY_Select:
|
||||
VirtualKey := VK_SELECT;
|
||||
{$ifdef GTK2}GDK_Key_Print{$else}GDK_Print{$EndIf}:
|
||||
GDK_KEY_Print:
|
||||
VirtualKey := VK_PRINT;
|
||||
{$ifdef GTK2}GDK_Key_Execute{$else}GDK_Execute{$EndIf}:
|
||||
GDK_KEY_Execute:
|
||||
VirtualKey := VK_EXECUTE;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Menu{$else}GDK_Menu{$EndIf}:
|
||||
GDK_KEY_Menu:
|
||||
VirtualKey := VK_MENU;
|
||||
// GDK_Find = $FF68;
|
||||
{$ifdef GTK2}GDK_Key_Cancel{$else}GDK_Cancel{$EndIf}:
|
||||
GDK_KEY_Cancel:
|
||||
VirtualKey := VK_CANCEL;
|
||||
{$ifdef GTK2}GDK_Key_Help{$else}GDK_Help{$EndIf}:
|
||||
GDK_KEY_Help:
|
||||
VirtualKey := VK_HELP;
|
||||
{$ifdef GTK2}GDK_Key_Break{$else}GDK_Break{$EndIf}:
|
||||
GDK_KEY_Break:
|
||||
VirtualKey := VK_CANCEL;
|
||||
{$ifdef GTK2}GDK_Key_Mode_switch{$else}GDK_Mode_switch{$EndIf}:
|
||||
GDK_KEY_Mode_switch:
|
||||
VirtualKey := VK_MODECHANGE;
|
||||
// GDK_script_switch = $FF7E;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Caps_Lock{$else}GDK_Caps_Lock{$EndIf}:
|
||||
GDK_KEY_Caps_Lock:
|
||||
VirtualKey := VK_CAPITAL;
|
||||
// GDK_Shift_Lock = $FFE6;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Shift_L{$else}GDK_Shift_L{$EndIf}:
|
||||
GDK_KEY_Shift_L:
|
||||
begin
|
||||
VirtualKey := VK_SHIFT;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Shift_R{$else}GDK_Shift_R{$EndIf}:
|
||||
GDK_KEY_Shift_R:
|
||||
begin
|
||||
VirtualKey := VK_SHIFT;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Control_L{$else}GDK_Control_L{$EndIf}:
|
||||
GDK_KEY_Control_L:
|
||||
begin
|
||||
VirtualKey := VK_CONTROL;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Control_R{$else}GDK_Control_R{$EndIf}:
|
||||
GDK_KEY_Control_R:
|
||||
begin
|
||||
VirtualKey := VK_CONTROL;
|
||||
Extended := True;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Alt_L{$else}GDK_Alt_L{$EndIf}:
|
||||
GDK_KEY_Alt_L:
|
||||
begin
|
||||
SysKey := True;
|
||||
VirtualKey:= VK_MENU;
|
||||
end;
|
||||
|
||||
{$ifdef GTK2}GDK_Key_Alt_R{$else}GDK_Alt_R{$EndIf}:
|
||||
GDK_KEY_Alt_R:
|
||||
begin
|
||||
SysKey := True;
|
||||
VirtualKey:= VK_MENU;
|
||||
@ -1558,21 +1568,13 @@ begin
|
||||
end;
|
||||
|
||||
// Function keys
|
||||
{$ifdef GTK2}
|
||||
GDK_KEY_F1..GDK_KEY_F24
|
||||
{$else}
|
||||
GDK_F1..GDK_F24
|
||||
{$EndIf}:
|
||||
GDK_KEY_F1..GDK_KEY_F24:
|
||||
VirtualKey := VK_F1 + (Event^.KeyVal -
|
||||
{$ifdef GTK2}GDK_Key_F1{$else}GDK_F1{$EndIf});
|
||||
GDK_KEY_F1);
|
||||
|
||||
//By VVI - fixing cyrillic keys
|
||||
//GDK_* is like a koi8-r, it is KOI8-R code +$600.
|
||||
{$ifdef GTK2}
|
||||
GDK_KEY_cyrillic_io..GDK_KEY_cyrillic_Capital_hardsign
|
||||
{$else}
|
||||
GDK_cyrillic_io..GDK_cyrillic_Capital_hardsign
|
||||
{$EndIf}:
|
||||
GDK_KEY_cyrillic_io..GDK_KEY_cyrillic_Capital_hardsign:
|
||||
KeyCode := Event^.KeyVal mod $100;
|
||||
end;
|
||||
|
||||
@ -4897,6 +4899,11 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.214 2003/10/03 01:25:01 ajgenius
|
||||
add more gtk1i<->gtk2 key & event wrappers,
|
||||
move more GTK2 workarounds from gtk to gtk2 interface,
|
||||
start GTK2 interface SetCallback
|
||||
|
||||
Revision 1.213 2003/09/25 20:44:42 ajgenius
|
||||
minor changes for gtk2
|
||||
|
||||
|
@ -517,10 +517,113 @@ function gtk_widget_get_ythickness(Style : PGTKStyle) : gint; overload;
|
||||
function gtk_widget_get_xthickness(Style : PGTKWidget) : gint; overload;
|
||||
function gtk_widget_get_ythickness(Style : PGTKWidget) : gint; overload;
|
||||
|
||||
procedure gdk_event_key_get_string(Event : PGDKEventKey; var theString : PPgchar);
|
||||
function gdk_event_get_type(Event : Pointer) : guint;
|
||||
|
||||
procedure BeginGDKErrorTrap;
|
||||
procedure EndGDKErrorTrap;
|
||||
|
||||
{$Ifdef GTK1}
|
||||
const
|
||||
GDK_KEY_Escape = GDK_Escape;
|
||||
GDK_key_dead_circumflex = GDK_dead_circumflex;
|
||||
GDK_KEY_KP_Space = GDK_KP_Space;
|
||||
GDK_KEY_KP_ENTER = GDK_KP_ENTER;
|
||||
GDK_KEY_Tab = GDK_Tab;
|
||||
GDK_KEY_ISO_Left_Tab = GDK_ISO_Left_Tab;
|
||||
GDK_KEY_KP_Tab = GDK_KP_Tab;
|
||||
GDK_KEY_RETURN = GDK_Return;
|
||||
GDK_KEY_LINEFEED = GDK_LINEFEED;
|
||||
GDK_KEY_INSERT = GDK_INSERT;
|
||||
GDK_KEY_HOME = GDK_HOME;
|
||||
GDK_KEY_LEFT = GDK_LEFT;
|
||||
GDK_KEY_UP = GDK_UP;
|
||||
GDK_KEY_RIGHT = GDK_RIGHT;
|
||||
GDK_KEY_DOWN = GDK_DOWN;
|
||||
GDK_KEY_Page_Up = GDK_Page_Up;
|
||||
GDK_KEY_Page_Down = GDK_Page_Down;
|
||||
GDK_KEY_End = GDK_End;
|
||||
GDK_KEY_KP_INSERT = GDK_KP_INSERT;
|
||||
GDK_KEY_KP_HOME = GDK_KP_HOME;
|
||||
GDK_KEY_KP_LEFT = GDK_KP_LEFT;
|
||||
GDK_KEY_KP_UP = GDK_KP_UP;
|
||||
GDK_KEY_KP_RIGHT = GDK_KP_RIGHT;
|
||||
GDK_KEY_KP_DOWN = GDK_KP_DOWN;
|
||||
GDK_KEY_KP_PAGE_UP = GDK_KP_PAGE_UP;
|
||||
GDK_KEY_KP_PAGE_DOWN = GDK_KP_PAGE_DOWN;
|
||||
GDK_KEY_KP_END = GDK_KP_END;
|
||||
GDK_KEY_Num_Lock = GDK_Num_Lock;
|
||||
GDK_KEY_KP_F1 = GDK_KP_F1;
|
||||
GDK_KEY_KP_F2 = GDK_KP_F2;
|
||||
GDK_KEY_KP_F3 = GDK_KP_F3;
|
||||
GDK_KEY_KP_F4 = GDK_KP_F4;
|
||||
GDK_KEY_KP_EQUAL = GDK_KP_EQUAL;
|
||||
GDK_KEY_KP_Multiply = GDK_KP_Multiply;
|
||||
GDK_KEY_KP_Add = GDK_KP_Add;
|
||||
GDK_KEY_KP_Separator = GDK_KP_Separator;
|
||||
GDK_KEY_KP_Subtract = GDK_KP_Subtract;
|
||||
GDK_KEY_KP_Decimal = GDK_KP_Decimal;
|
||||
GDK_KEY_KP_Divide = GDK_KP_Divide:
|
||||
GDK_KEY_KP_0 = GDK_KP_0;
|
||||
GDK_KEY_KP_1 = GDK_KP_1;
|
||||
GDK_KEY_KP_2 = GDK_KP_2;
|
||||
GDK_KEY_KP_3 = GDK_KP_3;
|
||||
GDK_KEY_KP_4 = GDK_KP_4;
|
||||
GDK_KEY_KP_5 = GDK_KP_5;
|
||||
GDK_KEY_KP_6 = GDK_KP_6;
|
||||
GDK_KEY_KP_7 = GDK_KP_7;
|
||||
GDK_KEY_KP_8 = GDK_KP_8;
|
||||
GDK_KEY_KP_9 = GDK_KP_9;
|
||||
GDK_KEY_BackSpace = GDK_BackSpace;
|
||||
GDK_KEY_Clear = GDK_Clear_Key;
|
||||
GDK_KEY_Pause = GDK_Pause;
|
||||
GDK_KEY_Scroll_Lock = GDK_Scroll_Lock;
|
||||
GDK_KEY_Sys_Req = GDK_Sys_Req;
|
||||
GDK_KEY_Escape = GDK_Escape;
|
||||
GDK_KEY_Delete = GDK_Delete_Key;
|
||||
GDK_KEY_Kanji = GDK_Kanji;
|
||||
GDK_KEY_Select = GDK_Select;
|
||||
GDK_KEY_Print = GDK_Print;
|
||||
GDK_KEY_Execute = GDK_Execute;
|
||||
GDK_KEY_Menu = GDK_Menu;
|
||||
GDK_KEY_Cancel = GDK_Cancel;
|
||||
GDK_KEY_Help = GDK_Help;
|
||||
GDK_KEY_Break = GDK_Break;
|
||||
GDK_KEY_Mode_switch = GDK_Mode_switch;
|
||||
GDK_KEY_Caps_Lock = GDK_Caps_Lock;
|
||||
GDK_KEY_Shift_L = GDK_Shift_L;
|
||||
GDK_KEY_Shift_R = GDK_Shift_R;
|
||||
GDK_KEY_Control_L = GDK_Control_L;
|
||||
GDK_KEY_Control_R = GDK_Control_R;
|
||||
GDK_KEY_Alt_L = GDK_Alt_L;
|
||||
GDK_KEY_Alt_R = GDK_Alt_R;
|
||||
GDK_KEY_F1 = GDK_F1;
|
||||
GDK_KEY_F2 = GDK_F2;
|
||||
GDK_KEY_F3 = GDK_F3;
|
||||
GDK_KEY_F4 = GDK_F4;
|
||||
GDK_KEY_F5 = GDK_F5;
|
||||
GDK_KEY_F6 = GDK_F6;
|
||||
GDK_KEY_F7 = GDK_F7;
|
||||
GDK_KEY_F8 = GDK_F8;
|
||||
GDK_KEY_F9 = GDK_F9;
|
||||
GDK_KEY_F10 = GDK_F10;
|
||||
GDK_KEY_F11 = GDK_F11;
|
||||
GDK_KEY_F12 = GDK_F12;
|
||||
GDK_KEY_F13 = GDK_F13;
|
||||
GDK_KEY_F14 = GDK_F14;
|
||||
GDK_KEY_F15 = GDK_F15;
|
||||
GDK_KEY_F16 = GDK_F16;
|
||||
GDK_KEY_F17 = GDK_F17;
|
||||
GDK_KEY_F18 = GDK_F18;
|
||||
GDK_KEY_F19 = GDK_F19;
|
||||
GDK_KEY_F20 = GDK_F20;
|
||||
GDK_KEY_F21 = GDK_F21;
|
||||
GDK_KEY_F22 = GDK_F22;
|
||||
GDK_KEY_F23 = GDK_F23
|
||||
GDK_KEY_F24 = GDK_F24;
|
||||
GDK_KEY_cyrillic_io = GDK_cyrillic_io;
|
||||
GDK_KEY_cyrillic_Capital_hardsign = GDK_cyrillic_io..GDK_cyrillic_Capital_hardsign;
|
||||
|
||||
type
|
||||
PGtkOldEditable = PGtkEditable;
|
||||
|
||||
|
@ -58,6 +58,7 @@ type
|
||||
procedure HookSignals(Sender: TObject); override;
|
||||
function IntSendMessage3(LM_Message : Integer; Sender : TObject; data : pointer) : integer; override;
|
||||
function LoadStockPixmap(StockID: longint) : HBitmap; override;
|
||||
procedure SetCallback(Msg : LongInt; Sender: TObject); override;
|
||||
procedure SetLabel(Sender : TObject; Data : Pointer); override;
|
||||
function SetProperties(Sender : TObject) : integer; override;
|
||||
procedure SetSelectionMode(Sender: TObject; Widget: PGtkWidget;
|
||||
@ -561,6 +562,11 @@ end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.24 2003/10/03 01:25:01 ajgenius
|
||||
add more gtk1i<->gtk2 key & event wrappers,
|
||||
move more GTK2 workarounds from gtk to gtk2 interface,
|
||||
start GTK2 interface SetCallback
|
||||
|
||||
Revision 1.23 2003/10/02 18:15:44 ajgenius
|
||||
more gtk2 (check)ListBox implementation
|
||||
|
||||
|
@ -22,6 +22,95 @@
|
||||
// {$DEFINE ASSERT_IS_ON}
|
||||
{$ENDIF}
|
||||
|
||||
function GTK2FocusCB( widget: PGtkWidget; event:PGdkEventFocus;
|
||||
data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Status : gBoolean;
|
||||
begin
|
||||
Status := GTKFocusCB(Widget, Event, Data);
|
||||
|
||||
if GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) then
|
||||
Result := Status
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function GTK2FocusCBAfter(widget: PGtkWidget; event:PGdkEventFocus;
|
||||
data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Status : gBoolean;
|
||||
begin
|
||||
Status := GTKFocusCBAfter(Widget, Event, Data);
|
||||
|
||||
if GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) then
|
||||
Result := Status
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function gtk2HideCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Status : GBoolean;
|
||||
begin
|
||||
Status := gtkHideCB(Widget, Data);
|
||||
|
||||
if GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) then
|
||||
Result := Status
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function GTK2KeyUpDown(Widget: PGtkWidget; Event : pgdkeventkey;
|
||||
Data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Status : gBoolean;
|
||||
begin
|
||||
Status := GTKKeyUpDown(Widget, Event, Data);
|
||||
|
||||
if GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) then
|
||||
Result := Status
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function GTK2KillFocusCB(widget: PGtkWidget; event:PGdkEventFocus;
|
||||
data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Status : gBoolean;
|
||||
begin
|
||||
Status := GTKKillFocusCB(Widget, Event, Data);
|
||||
|
||||
if GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) then
|
||||
Result := Status
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function GTK2KillFocusCBAfter(widget: PGtkWidget; event:PGdkEventFocus;
|
||||
data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Status : gBoolean;
|
||||
begin
|
||||
Status := GTKKillFocusCBAfter(Widget, Event, Data);
|
||||
|
||||
if GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) then
|
||||
Result := Status
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function gtk2showCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl;
|
||||
var
|
||||
Status : GBoolean;
|
||||
begin
|
||||
Status := gtkshowCB(Widget, Data);
|
||||
|
||||
if GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) then
|
||||
Result := Status
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
Procedure gtk_clb_toggle(cellrenderertoggle : PGtkCellRendererToggle; arg1 : PGChar;
|
||||
WinControl: TWinControl); cdecl;
|
||||
var
|
||||
@ -744,6 +833,113 @@ begin
|
||||
// end; // end of 1st case
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Function: TGTK2Object.SetCallback
|
||||
Params: Msg - message for which to set a callback
|
||||
sender - object to which callback will be send
|
||||
Returns: nothing
|
||||
|
||||
Applies a Message to the sender
|
||||
------------------------------------------------------------------------------}
|
||||
procedure TGTK2Object.SetCallback(Msg : LongInt; Sender: TObject);
|
||||
|
||||
procedure ConnectSenderSignal(const AnObject:PGTKObject; const ASignal: PChar;
|
||||
const ACallBackProc: Pointer);
|
||||
begin
|
||||
ConnectSignal(AnObject,ASignal,ACallBackProc,TComponent(Sender));
|
||||
end;
|
||||
|
||||
procedure ConnectSenderSignalAfter(const AnObject:PGTKObject;
|
||||
const ASignal: PChar; const ACallBackProc: Pointer);
|
||||
begin
|
||||
ConnectSignalAfter(AnObject,ASignal,ACallBackProc,TComponent(Sender));
|
||||
end;
|
||||
|
||||
procedure ConnectSenderSignal(const AnObject:PGTKObject; const ASignal: PChar;
|
||||
const ACallBackProc: Pointer; const ReqSignalMask: TGdkEventMask);
|
||||
begin
|
||||
ConnectSignal(AnObject,ASignal,ACallBackProc,TComponent(Sender),
|
||||
ReqSignalMask);
|
||||
end;
|
||||
|
||||
procedure ConnectSenderSignalAfter(const AnObject:PGTKObject;
|
||||
const ASignal: PChar; const ACallBackProc: Pointer;
|
||||
const ReqSignalMask: TGdkEventMask);
|
||||
begin
|
||||
ConnectSignalAfter(AnObject,ASignal,ACallBackProc,TComponent(Sender),
|
||||
ReqSignalMask);
|
||||
end;
|
||||
|
||||
procedure ConnectFocusEvents(const AnObject: PGTKObject);
|
||||
begin
|
||||
ConnectSenderSignal(AnObject, 'focus-in-event', @gtk2FocusCB);
|
||||
ConnectSenderSignalAfter(AnObject, 'focus-in-event', @gtk2FocusCBAfter);
|
||||
ConnectSenderSignal(AnObject, 'focus-out-event', @gtk2KillFocusCB);
|
||||
ConnectSenderSignalAfter(AnObject, 'focus-out-event', @gtk2KillFocusCBAfter);
|
||||
end;
|
||||
|
||||
var
|
||||
gObject, gFixed, gCore, Scroll: PGTKObject;
|
||||
begin
|
||||
gObject := ObjectToGTKObject(Sender);
|
||||
if gObject = nil then Exit;
|
||||
|
||||
// gFixed is the widget with the client area (e.g. TGroupBox, TForm have this)
|
||||
gFixed := PGTKObject(GetFixedWidget(gObject));
|
||||
if gFixed = nil then gFixed := gObject;
|
||||
|
||||
// gCore is the main widget (e.g. TListView has this)
|
||||
gCore:= PGtkObject(GetWidgetInfo(gObject, True)^.ImplementationWidget);
|
||||
|
||||
case Msg of
|
||||
LM_FOCUS :
|
||||
begin
|
||||
if (Sender is TCustomComboBox) then begin
|
||||
ConnectFocusEvents(PgtkObject(PgtkCombo(gObject)^.entry));
|
||||
ConnectFocusEvents(PgtkObject(PgtkCombo(gObject)^.list));
|
||||
end else begin
|
||||
ConnectFocusEvents(gCore);
|
||||
end;
|
||||
end;
|
||||
|
||||
LM_CHAR,
|
||||
LM_KEYDOWN,
|
||||
LM_KEYUP,
|
||||
|
||||
LM_SYSCHAR,
|
||||
LM_SYSKEYDOWN,
|
||||
LM_SYSKEYUP:
|
||||
begin
|
||||
if (Sender is TCustomComboBox) then begin
|
||||
ConnectSenderSignal(PgtkObject(PgtkCombo(gObject)^.entry),
|
||||
'key-press-event', @GTK2KeyUpDown, GDK_KEY_PRESS_MASK);
|
||||
ConnectSenderSignal(PgtkObject(PgtkCombo(gObject)^.entry),
|
||||
'key-release-event', @GTK2KeyUpDown, GDK_KEY_RELEASE_MASK);
|
||||
end
|
||||
else if (Sender is TCustomForm) then begin
|
||||
ConnectSenderSignal(gObject, 'key-press-event', @GTK2KeyUpDown,
|
||||
GDK_KEY_PRESS_MASK);
|
||||
ConnectSenderSignal(gObject, 'key-release-event', @GTK2KeyUpDown,
|
||||
GDK_KEY_RELEASE_MASK);
|
||||
end;
|
||||
ConnectSenderSignal(gCore, 'key-press-event', @GTK2KeyUpDown,
|
||||
GDK_KEY_PRESS_MASK);
|
||||
ConnectSenderSignal(gCore, 'key-release-event', @GTK2KeyUpDown,
|
||||
GDK_KEY_RELEASE_MASK);
|
||||
end;
|
||||
|
||||
|
||||
LM_SHOWWINDOW :
|
||||
begin
|
||||
ConnectSenderSignal(gObject, 'show', @gtk2showCB);
|
||||
ConnectSenderSignal(gObject, 'hide', @gtk2hideCB);
|
||||
end;
|
||||
|
||||
else
|
||||
Inherited SetCallback(Msg, Sender);
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TGtk2Object.LoadStockPixmap(StockID: longint) : HBitmap;
|
||||
var
|
||||
Pixmap : PGDIObject;
|
||||
@ -1160,6 +1356,11 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.5 2003/10/03 01:25:01 ajgenius
|
||||
add more gtk1i<->gtk2 key & event wrappers,
|
||||
move more GTK2 workarounds from gtk to gtk2 interface,
|
||||
start GTK2 interface SetCallback
|
||||
|
||||
Revision 1.4 2003/10/02 18:15:44 ajgenius
|
||||
more gtk2 (check)ListBox implementation
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user