From 92dbf72761fb780a166a53bd148f780688cb6567 Mon Sep 17 00:00:00 2001 From: ajgenius Date: Thu, 2 Oct 2003 01:18:38 +0000 Subject: [PATCH] more callbacks fixes for gtk2, partly fix gtk2 CheckListBox git-svn-id: trunk@4690 - --- lcl/interfaces/gtk/gtkcallback.inc | 282 ++++++++++++++++++++++++++--- lcl/interfaces/gtk/gtkobject.inc | 5 + lcl/interfaces/gtk2/gtk2object.inc | 47 ++++- 3 files changed, 304 insertions(+), 30 deletions(-) diff --git a/lcl/interfaces/gtk/gtkcallback.inc b/lcl/interfaces/gtk/gtkcallback.inc index edda49987d..8beefa46de 100644 --- a/lcl/interfaces/gtk/gtkcallback.inc +++ b/lcl/interfaces/gtk/gtkcallback.inc @@ -130,7 +130,12 @@ var TheWindow: PGdkWindow; TheForm: TCustomForm; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + EventTrace('realize', nil); if (Data<>nil) then begin @@ -206,7 +211,12 @@ var ClientWidget: PGtkWidget; MainWidget: PGtkWidget; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + if Data=nil then ; EventTrace('realizeafter', nil); @@ -265,33 +275,58 @@ 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 ; FillChar(Mess,SizeOf(Mess),0); Mess.Msg := LM_SHOWWINDOW; Mess.Show := True; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} 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; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function gtkactivateCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMessage; + Status : GBoolean; begin Result:= True; EventTrace('activate', data); @@ -300,8 +335,14 @@ begin Mess.Msg := LM_ACTIVATE; Mess.Result := 0; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; //writeln('gtkactivateCB ',Result); + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function GTKCheckMenuToggeledCB(AMenuItem: PGTKCheckMenuItem; AData: gPointer): GBoolean; cdecl; @@ -309,7 +350,12 @@ function GTKCheckMenuToggeledCB(AMenuItem: PGTKCheckMenuItem; AData: gPointer): var LCLMenuItem: TMenuItem; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + EventTrace('toggled', AData); LCLMenuItem := TMenuItem(AData); @@ -331,36 +377,67 @@ end; function gtkchangedCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMessage; + Status : GBoolean; begin if ComponentIsDestroyingHandle(TWinControl(Data)) or (LockOnChange(PgtkObject(Widget),0)>0) then exit; EventTrace('changed', data); Mess.Msg := LM_CHANGED; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function gtkchanged_editbox( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMessage; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + if LockOnChange(PgtkObject(Widget),0)>0 then exit; EventTrace('changed_editbox', data); Mess.Msg := CM_TEXTCHANGED; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function gtkdaychanged(Widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var MSG: TLMessage; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + if LockOnChange(PgtkObject(Widget),0)>0 then exit; EventTrace('day changed', data); MSG.Msg := LM_DAYCHANGED; - Result := DeliverPostMessage(Data, MSG); + Status := DeliverPostMessage(Data, MSG); + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; @@ -395,7 +472,11 @@ function gtkExposeEventAfter(Widget: PGtkWidget; Event : PGDKEventExpose; var DesignOnlySignal: boolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} EventTrace('ExposeAfter', data); if (Event^.Count > 0) then exit; @@ -421,6 +502,7 @@ function gtkfrmactivateAfter(widget: PGtkWidget; Event : PgdkEventFocus; data: gPointer) : GBoolean; cdecl; var Mess : TLMActivate; + Status : GBoolean; {$IFDEF VerboseFocus} LCLObject: TObject; CurFocusWidget: PGtkWidget; @@ -458,13 +540,20 @@ begin writeln(''); {$ENDIF} Mess.Msg := LM_ACTIVATE; - Result := DeliverPostMessage(Data, Mess); + Status := DeliverPostMessage(Data, Mess); + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function gtkfrmdeactivateAfter( widget: PGtkWidget; Event : PgdkEventFocus; data: gPointer) : GBoolean; cdecl; var Mess : TLMActivate; + Status : GBoolean; {$IFDEF VerboseFocus} LCLObject: TControl; {$ENDIF} @@ -481,12 +570,22 @@ begin writeln(' LCLObject=nil'); {$ENDIF} Mess.Msg := LM_DEACTIVATE; - Result := DeliverPostMessage(Data, Mess); + Status := DeliverPostMessage(Data, Mess); + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function GTKMap(Widget: PGTKWidget; Data: gPointer): GBoolean; cdecl; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} if (Widget=nil) then ; EventTrace('map', data); end; @@ -875,13 +974,25 @@ end; function gtkdestroyCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess: TLMessage; + Status : GBoolean; Info: PWinWidgetInfo; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + EventTrace('destroy', data); FillChar(Mess,SizeOf(Mess),0); Mess.msg := LM_DESTROY; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} // NOTE: if the destroy message is posted // we should post an info destroy message as well @@ -904,7 +1015,11 @@ function gtkresizeCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; //var // Mess : TLMessage; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} if (Widget=nil) then ; EventTrace('resize', data); // Mess.msg := LM_RESIZE; @@ -916,13 +1031,24 @@ end; function gtkMonthChanged(Widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess: TLMessage; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} if (Widget=nil) then ; EventTrace('month changed', data); FillChar(Mess,SizeOf(Mess),0); Mess.Msg := LM_MONTHCHANGED; - Result := DeliverPostMessage(Data, Mess); + Status := DeliverPostMessage(Data, Mess); + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; {------------------------------------------------------------------------------- @@ -2017,19 +2143,37 @@ end; function gtkPressedCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMessage; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + if (Widget=nil) then ; EventTrace('pressed', data); Mess.msg := LM_PRESSED; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function gtkEnterCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMessage; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + EventTrace('enter', data); if csDesigning in TControl(Data).ComponentState then begin @@ -2039,14 +2183,26 @@ begin Mess.msg := CM_MOUSEENTER; writeln('gtkEnterCB'); - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function gtkLeaveCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMessage; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + EventTrace('leave', data); if csDesigning in TControl(Data).ComponentState then begin @@ -2056,14 +2212,25 @@ begin Mess.msg := CM_MOUSELEAVE; writeln('gtkLeaveCB'); - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function gtkMoveCursorCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMessage; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + if (Widget=nil) then ; EventTrace('move-cursor', data); Mess.msg := LM_MOVECURSOR; @@ -2105,7 +2272,12 @@ begin writeln('VFP gtksize_allocateCB: ',TControl(Data).ClassName,' ',Size^.X,',',Size^.Y); {$ENDIF} SaveSizeNotification(Widget); - Result:=true; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := True; + {$endif} end; function gtksize_allocate_client(widget: PGtkWidget; size: pGtkAllocation; @@ -2139,7 +2311,11 @@ begin exit; end; - Result:=true; + {$ifdef GTK2} + Result := False; + {$Else} + Result := True; + {$endif} end; function gtkswitchpage(widget: PGtkWidget; page: Pgtkwidget; pagenum: integer; @@ -2147,8 +2323,14 @@ function gtkswitchpage(widget: PGtkWidget; page: Pgtkwidget; pagenum: integer; var Mess : TLMNotify; T : tagNMHDR; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + if (Widget=nil) or (Page=nil) then ; EventTrace('switch-page', data); UpdateNoteBookClientWidget(TObject(Data)); @@ -2157,7 +2339,13 @@ begin T.hwndfrom := longint(widget); T.idfrom := pagenum; //use this to set pageindex to the correct page. Mess.NMHdr := @T; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; @@ -2189,12 +2377,24 @@ end; function gtkreleasedCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMEssage; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + if (Widget=nil) then ; EventTrace('released', data); Mess.msg := LM_RELEASED; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; function gtkInsertText( widget: PGtkWidget; char : pChar; NewTextLength : Integer; Position : pgint; data: gPointer) : GBoolean; cdecl; @@ -2202,7 +2402,11 @@ var Memo: TCustomMemo; CurrLength, CutLength: integer; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} { GTK does not provide its own max. length for memos we have to do our own. } @@ -2347,11 +2551,18 @@ end; function gtkValueChanged(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var Mess : TLMessage; + Status : GBoolean; begin EventTrace('Value changed', data); if (Widget=nil) then ; Mess.msg := LM_CHANGED; - Result := DeliverMessage(Data, Mess) = 0; + Status := DeliverMessage(Data, Mess) = 0; + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; {------------------------------------------------------------------------------ @@ -2482,6 +2693,7 @@ var Scroll: PGTKHScrollBar; X, Y: GInt; Mask: TGdkModifierType; + Status : GBoolean; begin Assert(False, Format('Trace:[GTKHScrollCB] Value: %d', [Round(Adjustment^.Value)])); @@ -2529,7 +2741,13 @@ begin Pos := V; ScrollBar := HWND(Scroll); end; - Result := DeliverMessage(Data, Msg) = 0; + Status := DeliverMessage(Data, Msg) = 0; + + {$Ifdef GTK2} + Status := False; + {$Endif} + + Result := Status end; function GTKVScrollCB(Adjustment: PGTKAdjustment; @@ -2542,6 +2760,7 @@ var Scroll: PGTKHScrollBar; X, Y: GInt; Mask: TGdkModifierType; + Status : GBoolean; begin Assert(False, Format('Trace:[GTKVScrollCB] Value: %d', [Round(Adjustment^.Value)])); @@ -2590,7 +2809,13 @@ begin Pos := V; ScrollBar := HWND(Scroll); end; - Result := DeliverMessage(Data, Msg) = 0; + Status := DeliverMessage(Data, Msg) = 0; + + {$Ifdef GTK2} + Status := False; + {$Endif} + + Result := Status end; {------------------------------------------------------------------------------ @@ -2692,12 +2917,24 @@ end; function gtkYearChanged(Widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var MSG: TLMessage; + Status : GBoolean; begin + {$ifdef GTK2} + Result := False; + {$Else} Result := True; + {$endif} + if (Widget=nil) then ; EventTrace('year changed', data); MSG.Msg := LM_YEARCHANGED; - Result := DeliverPostMessage(Data, MSG); + Status := DeliverPostMessage(Data, MSG); + + {$ifdef GTK2} + Result := False; + {$Else} + Result := Status; + {$endif} end; {------------------------------------------------------------------------------ @@ -2926,6 +3163,9 @@ end; { ============================================================================= $Log$ + Revision 1.199 2003/10/02 01:18:38 ajgenius + more callbacks fixes for gtk2, partly fix gtk2 CheckListBox + Revision 1.198 2003/10/01 20:51:09 ajgenius partly fix focus callbacks for GTK2 diff --git a/lcl/interfaces/gtk/gtkobject.inc b/lcl/interfaces/gtk/gtkobject.inc index beb51fccb1..2d9f636890 100644 --- a/lcl/interfaces/gtk/gtkobject.inc +++ b/lcl/interfaces/gtk/gtkobject.inc @@ -4707,6 +4707,7 @@ begin SetCallback(LM_GRABFOCUS,Sender); end; + {$IfDef GTK1} csListview: begin SetCallback(LM_HSCROLL,Sender); @@ -4717,6 +4718,7 @@ begin SetCallback(LVN_DELETEITEM,Sender); SetCallback(LVN_INSERTITEM,Sender); end; + {$EndIf} csScrollBox : Begin @@ -8443,6 +8445,9 @@ end; { ============================================================================= $Log$ + Revision 1.430 2003/10/02 01:18:38 ajgenius + more callbacks fixes for gtk2, partly fix gtk2 CheckListBox + Revision 1.429 2003/09/25 20:44:42 ajgenius minor changes for gtk2 diff --git a/lcl/interfaces/gtk2/gtk2object.inc b/lcl/interfaces/gtk2/gtk2object.inc index 07b9aec4a2..8074580754 100644 --- a/lcl/interfaces/gtk2/gtk2object.inc +++ b/lcl/interfaces/gtk2/gtk2object.inc @@ -22,23 +22,45 @@ // {$DEFINE ASSERT_IS_ON} {$ENDIF} +Procedure gtk_clb_toggle(cellrenderertoggle : PGtkCellRendererToggle; arg1 : PGChar; + treeview : PGtkTreeView); cdecl; +var + aTreeModel : PGtkTreeModel; + aTreeIter : TGtkTreeIter; + value : pgValue; +begin + aTreeModel := gtk_tree_view_get_model (treeview); + if (gtk_tree_model_get_iter_from_string (aTreeModel, @aTreeIter, arg1)) then begin + aTreeIter.stamp := GTK_LIST_STORE (aTreeModel)^.stamp; //strange hack + value := g_new0(SizeOf(TgValue), 1); + gtk_tree_model_get_value(aTreeModel, @aTreeIter, 0, value); + + g_value_set_boolean(value, not g_value_get_boolean(value)); + + gtk_list_store_set_value (GTK_LIST_STORE (aTreeModel), @aTreeIter, 0, value); + g_value_unset(value); + g_free(value); + end; +end; + Procedure gtk_clb_toggle_row_activated(treeview : PGtkTreeView; arg1 : PGtkTreePath; arg2 : PGtkTreeViewColumn; data : gpointer); cdecl; var aTreeModel : PGtkTreeModel; aTreeIter : TGtkTreeIter; - value : boolean; + value : PGValue; begin aTreeModel := gtk_tree_view_get_model (treeview); if (gtk_tree_model_get_iter (aTreeModel, @aTreeIter, arg1)) then begin - gtk_tree_model_get (aTreeModel, @aTreeIter, [0, @value, -1]); + aTreeIter.stamp := GTK_LIST_STORE (aTreeModel)^.stamp; //strange hack + value := g_new0(SizeOf(TgValue), 1); + gtk_tree_model_get_value(aTreeModel, @aTreeIter, 0, value); - If value then - value := False - else - value := True; - - gtk_list_store_set (GTK_LIST_STORE (aTreeModel), @aTreeIter, [0, value, -1]); + g_value_set_boolean(value, not g_value_get_boolean(value)); + + gtk_list_store_set_value (GTK_LIST_STORE (aTreeModel), @aTreeIter, 0, value); + g_value_unset(value); + g_free(value); end; end; @@ -130,9 +152,13 @@ begin TempInt := 0; if (CompStyle = csCheckListBox) then begin renderer := gtk_cell_renderer_toggle_new(); - column := gtk_tree_view_column_new_with_attributes('', renderer, ['active', 0, nil]); + column := gtk_tree_view_column_new_with_attributes('', renderer, ['active', 0, nil]); + gtk_cell_renderer_toggle_set_active(GTK_CELL_RENDERER_TOGGLE(renderer), True); gtk_tree_view_append_column (GTK_TREE_VIEW (TempWidget), column); gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE); + g_signal_connect (renderer, 'toggled', + G_CALLBACK (@gtk_clb_toggle), + TempWidget); g_signal_connect (GTK_TREE_VIEW (TempWidget), 'row_activated', G_CALLBACK (@gtk_clb_toggle_row_activated), nil); @@ -978,6 +1004,9 @@ end; { ============================================================================= $Log$ + Revision 1.3 2003/10/02 01:18:38 ajgenius + more callbacks fixes for gtk2, partly fix gtk2 CheckListBox + Revision 1.2 2003/09/24 17:23:54 ajgenius more work toward GTK2 - partly fix CheckListBox, & MenuItems