diff --git a/lcl/interfaces/gtk/gtkobject.inc b/lcl/interfaces/gtk/gtkobject.inc index b9e1f06923..316cfe860e 100644 --- a/lcl/interfaces/gtk/gtkobject.inc +++ b/lcl/interfaces/gtk/gtkobject.inc @@ -3212,8 +3212,8 @@ begin LM_DAYCHANGED : //calendar Begin - ConnectSenderSignal(gObject, 'day-selected', @gtkdaychanged); - ConnectSenderSignal(gObject, 'day-selected-double-click', @gtkdaychanged); + ConnectSenderSignal(gCore, 'day-selected', @gtkdaychanged); + ConnectSenderSignal(gCore, 'day-selected-double-click', @gtkdaychanged); end; LM_PAINT : @@ -3259,9 +3259,9 @@ begin LM_MONTHCHANGED: //calendar Begin - ConnectSenderSignal(gObject, 'month-changed', @gtkmonthchanged); - ConnectSenderSignal(gObject, 'prev-month', @gtkmonthchanged); - ConnectSenderSignal(gObject, 'next-month', @gtkmonthchanged); + ConnectSenderSignal(gCore, 'month-changed', @gtkmonthchanged); + ConnectSenderSignal(gCore, 'prev-month', @gtkmonthchanged); + ConnectSenderSignal(gCore, 'next-month', @gtkmonthchanged); end; LM_PRESSED: @@ -3540,8 +3540,8 @@ begin LM_YEARCHANGED : //calendar Begin - ConnectSenderSignal(gObject, 'prev-year', @gtkyearchanged); - ConnectSenderSignal(gObject, 'next-year', @gtkyearchanged); + ConnectSenderSignal(gCore, 'prev-year', @gtkyearchanged); + ConnectSenderSignal(gCore, 'next-year', @gtkyearchanged); end; // Listview & Header control @@ -4934,7 +4934,12 @@ begin csCalendar : begin - p := gtk_calendar_new(); + p := gtk_frame_new(nil); + TempWidget := gtk_calendar_new(); + gtk_container_add(GTK_CONTAINER(p), TempWidget); + SetMainWidget(p, TempWidget); + GetWidgetInfo(p, True)^.CoreWidget := TempWidget; + gtk_widget_show_all(p); end; csCheckbox : @@ -6900,6 +6905,9 @@ end; { ============================================================================= $Log$ + Revision 1.644 2005/03/18 14:43:53 mattias + creating gtk_calendar in a gtk_frame - calendar seems to need a parent window + Revision 1.643 2005/03/11 15:35:49 mattias implemented for gtk intf TFileDialog.FilterIndex from Jesus diff --git a/lcl/interfaces/gtk/gtkwscalendar.pp b/lcl/interfaces/gtk/gtkwscalendar.pp index ca02a9089b..a1095a4a72 100644 --- a/lcl/interfaces/gtk/gtkwscalendar.pp +++ b/lcl/interfaces/gtk/gtkwscalendar.pp @@ -33,7 +33,7 @@ uses {$ELSE} glib, gdk, gtk, {$Ifndef NoGdkPixbufLib}gdkpixbuf,{$EndIf} GtkFontCache, {$ENDIF} - Calendar, WSCalendar, WSLCLClasses; + GtkProc, GtkDef, Calendar, WSCalendar, WSLCLClasses; type @@ -50,14 +50,26 @@ type class procedure SetReadOnly(const ACalendar: TCustomCalendar; const AReadOnly: boolean); override; end; +function GetGtkCalendar(const ACalendar: TCustomCalendar): PGtkCalendar; implementation +function GetGtkCalendar(const ACalendar: TCustomCalendar): PGtkCalendar; +var + WinWidgetInfo: PWidgetInfo; +begin + Result:=nil; + if (ACalendar=nil) or (not ACalendar.HandleAllocated) then exit; + WinWidgetInfo:=GetWidgetInfo(PGtkWidget(ACalendar.Handle), False); + if WinWidgetInfo=nil then exit; + Result:=PGtkCalendar(WinWidgetInfo^.CoreWidget); +end; + function TGtkWSCalendar.GetDateTime(const ACalendar: TCustomCalendar): TDateTime; var Year, Month, Day: word; //used for csCalendar begin - gtk_calendar_get_date(PGtkCalendar(ACalendar.Handle), @Year, @Month, @Day); + gtk_calendar_get_date(GetGtkCalendar(ACalendar), @Year, @Month, @Day); //For some reason, the month is zero based. Result := EncodeDate(Year,Month+1,Day); end; @@ -67,7 +79,7 @@ var Year, Month, Day: string; GtkCalendar: PGtkCalendar; begin - GtkCalendar := PGtkCalendar(ACalendar.Handle); + GtkCalendar := GetGtkCalendar(ACalendar); Year := FormatDateTime('yyyy', ADateTime); Month := FormatDateTime('mm', ADateTime); Day := FormatDateTime('dd', ADateTime); @@ -98,14 +110,15 @@ begin num := Num + (1 shl 4); gtkCalendarDisplayOptions := TGtkCalendarDisplayOptions(num); - gtk_Calendar_Display_options(PGtkCalendar(ACalendar.Handle), gtkCalendarDisplayOptions); + gtk_Calendar_Display_options(GetGtkCalendar(ACalendar), gtkCalendarDisplayOptions); end; -procedure TGtkWSCalendar.SetReadOnly(const ACalendar: TCustomCalendar; const AReadOnly: boolean); +procedure TGtkWSCalendar.SetReadOnly(const ACalendar: TCustomCalendar; + const AReadOnly: boolean); var GtkCalendar: PGtkCalendar; begin - GtkCalendar := PGtkCalendar(ACalendar.Handle); + GtkCalendar := GetGtkCalendar(ACalendar); if AReadOnly then gtk_calendar_freeze(GtkCalendar) else