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:
ajgenius 2003-10-03 01:25:01 +00:00
parent f24db7949b
commit 983bc1227d
5 changed files with 432 additions and 188 deletions

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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