mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-16 16:09:30 +02:00
fixed memleak in gtk opendlg
git-svn-id: trunk@5320 -
This commit is contained in:
parent
1dd0201529
commit
53728989e3
@ -2073,13 +2073,13 @@ var
|
||||
begin
|
||||
Result:=false;
|
||||
if (Data=nil) then ;
|
||||
theDialog:=TCommonDialog(GetLCLObject(Widget));
|
||||
theDialog:=TCommonDialog(GetNearestLCLObject(Widget));
|
||||
if (theDialog is TOpenDialog) then begin
|
||||
// check if history activated
|
||||
AHistoryEntry:=gtk_object_get_data(PGtkObject(Widget),
|
||||
'LCLIsHistoryMenuItem');
|
||||
if (AHistoryEntry<>nil) and (AHistoryEntry^.Filename<>nil) then begin
|
||||
// use has choosen a history file
|
||||
// user has choosen a history file
|
||||
// -> select it in the filedialog
|
||||
gtk_file_selection_complete(PGtkFileSelection(theDialog.Handle),
|
||||
AHistoryEntry^.Filename);
|
||||
@ -3065,6 +3065,9 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.222 2004/03/18 00:55:56 mattias
|
||||
fixed memleak in gtk opendlg
|
||||
|
||||
Revision 1.221 2004/02/23 18:24:38 mattias
|
||||
completed new TToolBar
|
||||
|
||||
|
@ -5344,7 +5344,6 @@ begin
|
||||
// create the menu items in the history menu
|
||||
MenuItemWidget:=gtk_menu_item_new_with_label(
|
||||
PFileSelHistoryEntry(HistoryList[i])^.Filename);
|
||||
SetLCLObject(MenuItemWidget,OpenDialog);
|
||||
// connect the new MenuItem to the HistoryList entry
|
||||
gtk_object_set_data(PGtkObject(MenuItemWidget), 'LCLIsHistoryMenuItem',
|
||||
HistoryList[i]);
|
||||
@ -5637,51 +5636,52 @@ procedure TGtkWidgetSet.InitializeOpenDialog(OpenDialog: TOpenDialog;
|
||||
SelWidget: PGtkWidget);
|
||||
var
|
||||
FileDetailLabel, HBox, FrameWidget: PGtkWidget;
|
||||
FileSelWidget: PGtkFileSelection;
|
||||
begin
|
||||
FileSelWidget:=GTK_FILE_SELECTION(SelWidget);
|
||||
|
||||
// Multiselection
|
||||
if ofAllowMultiSelect in OpenDialog.Options then
|
||||
begin
|
||||
LastFileSelectRow := -1;
|
||||
g_signal_connect(gtk_object(PGtkCList(
|
||||
PGtkFileSelection(SelWidget)^.file_list)),
|
||||
g_signal_connect(gtk_object(FileSelWidget^.file_list),
|
||||
'select-row',
|
||||
gtk_signal_func(@gtkOpenDialogRowSelectCB), OpenDialog);
|
||||
gtk_clist_set_selection_mode(
|
||||
PGtkCList(PGtkFileSelection(SelWidget)^.file_list),
|
||||
GTK_SELECTION_MULTIPLE);
|
||||
PGtkCList(FileSelWidget^.file_list),GTK_SELECTION_MULTIPLE);
|
||||
end;
|
||||
|
||||
// Help button
|
||||
if (ofShowHelp in OpenDialog.Options)
|
||||
and (GTK_FILE_SELECTION(SelWidget)^.Help_Button<>nil) then begin
|
||||
gtk_widget_show(GTK_FILE_SELECTION(SelWidget)^.Help_Button);
|
||||
g_signal_connect( gtk_object((PGtkFileSelection(SelWidget))^.help_button),
|
||||
and (FileSelWidget^.Help_Button<>nil) then begin
|
||||
gtk_widget_show(FileSelWidget^.Help_Button);
|
||||
g_signal_connect( gtk_object(FileSelWidget^.help_button),
|
||||
'clicked', gtk_signal_func(@gtkDialogHelpclickedCB), OpenDialog);
|
||||
end;
|
||||
|
||||
// connect selection entry (edit field for filename)
|
||||
if (GTK_FILE_SELECTION(SelWidget)^.selection_entry<>nil) then begin
|
||||
SetLCLObject(GTK_FILE_SELECTION(SelWidget)^.selection_entry,OpenDialog);
|
||||
if (FileSelWidget^.selection_entry<>nil) then begin
|
||||
SetLCLObject(FileSelWidget^.selection_entry,OpenDialog);
|
||||
g_signal_connect(
|
||||
gtk_object((PGtkFileSelection(SelWidget))^.selection_entry),
|
||||
gtk_object(FileSelWidget^.selection_entry),
|
||||
'key-press-event', gtk_signal_func(@GTKDialogKeyUpDownCB),
|
||||
OpenDialog);
|
||||
g_signal_connect(
|
||||
gtk_object((PGtkFileSelection(SelWidget))^.selection_entry),
|
||||
gtk_object(FileSelWidget^.selection_entry),
|
||||
'focus-in-event', gtk_signal_func(@GTKDialogFocusInCB), OpenDialog);
|
||||
end;
|
||||
|
||||
// connect dir list (list of directories)
|
||||
if (GTK_FILE_SELECTION(SelWidget)^.dir_list<>nil) then begin
|
||||
SetLCLObject(GTK_FILE_SELECTION(SelWidget)^.dir_list,OpenDialog);
|
||||
g_signal_connect(gtk_object((PGtkFileSelection(SelWidget))^.dir_list),
|
||||
if (FileSelWidget^.dir_list<>nil) then begin
|
||||
SetLCLObject(FileSelWidget^.dir_list,OpenDialog);
|
||||
g_signal_connect(gtk_object(FileSelWidget^.dir_list),
|
||||
'select-row', gtk_signal_func(@GTKDialogSelectRowCB), OpenDialog);
|
||||
end;
|
||||
|
||||
// connect file list (list of files in current directory)
|
||||
if (GTK_FILE_SELECTION(SelWidget)^.file_list<>nil) then begin
|
||||
SetLCLObject(GTK_FILE_SELECTION(SelWidget)^.file_list,OpenDialog);
|
||||
g_signal_connect(gtk_object((PGtkFileSelection(SelWidget))^.file_list),
|
||||
if (FileSelWidget^.file_list<>nil) then begin
|
||||
SetLCLObject(FileSelWidget^.file_list,OpenDialog);
|
||||
g_signal_connect(gtk_object(FileSelWidget^.file_list),
|
||||
'select-row', gtk_signal_func(@GTKDialogSelectRowCB), OpenDialog);
|
||||
end;
|
||||
|
||||
@ -5695,7 +5695,7 @@ begin
|
||||
if (ofViewDetail in OpenDialog.Options) then begin
|
||||
// create the frame around the information
|
||||
FrameWidget:=gtk_frame_new(PChar(rsFileInformation));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(SelWidget)^.main_vbox),
|
||||
gtk_box_pack_start(GTK_BOX(FileSelWidget^.main_vbox),
|
||||
FrameWidget,false,false,0);
|
||||
gtk_widget_show(FrameWidget);
|
||||
// create a HBox, so that the information is left justified
|
||||
@ -5716,8 +5716,7 @@ begin
|
||||
|
||||
// set initial filename
|
||||
if OpenDialog.Filename<>'' then
|
||||
gtk_file_selection_set_filename(GTK_FILE_SELECTION(SelWidget),
|
||||
PChar(OpenDialog.Filename));
|
||||
gtk_file_selection_set_filename(FileSelWidget,PChar(OpenDialog.Filename));
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -9283,6 +9282,9 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.480 2004/03/18 00:55:56 mattias
|
||||
fixed memleak in gtk opendlg
|
||||
|
||||
Revision 1.479 2004/03/09 15:30:15 peter
|
||||
* fixed gtk2 compilation
|
||||
|
||||
|
@ -2526,6 +2526,8 @@ var
|
||||
AHistoryEntry: PFileSelHistoryEntry;
|
||||
AFilterEntry: PFileSelFilterEntry;
|
||||
i: integer;
|
||||
FileSelWidget: PGtkFileSelection;
|
||||
LCLFilterMenu, LCLHistoryMenu: PGTKWidget;
|
||||
begin
|
||||
if (ADialog=nil) or (not ADialog.HandleAllocated) then exit;
|
||||
DlgWindow:=PGtkWidget(ADialog.Handle);
|
||||
@ -2534,7 +2536,18 @@ begin
|
||||
{$ENDIF}
|
||||
gtk_window_set_transient_for(PGtkWindow(DlgWindow),nil);
|
||||
if ADialog is TOpenDialog then begin
|
||||
|
||||
|
||||
FileSelWidget:=GTK_FILE_SELECTION(DlgWindow);
|
||||
FreeWinWidgetInfo(FileSelWidget^.selection_entry);
|
||||
FreeWinWidgetInfo(FileSelWidget^.dir_list);
|
||||
FreeWinWidgetInfo(FileSelWidget^.file_list);
|
||||
LCLFilterMenu:=PGTKWidget(gtk_object_get_data(PGtkObject(FileSelWidget),
|
||||
'LCLFilterMenu'));
|
||||
if LCLFilterMenu<>nil then FreeWinWidgetInfo(LCLFilterMenu);
|
||||
LCLHistoryMenu:=PGTKWidget(gtk_object_get_data(PGtkObject(FileSelWidget),
|
||||
'LCLHistoryMenu'));
|
||||
if LCLHistoryMenu<>nil then FreeWinWidgetInfo(LCLHistoryMenu);
|
||||
|
||||
// free history
|
||||
HistoryList:=TList(gtk_object_get_data(PGtkObject(DlgWindow),
|
||||
'LCLHistoryList'));
|
||||
@ -2974,7 +2987,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function CreateWidgetInfo(const AHandle: THandle; const AObject: TObject; const AParams: TCreateParams): PWinWidgetInfo;
|
||||
function CreateWidgetInfo(const AHandle: THandle; const AObject: TObject;
|
||||
const AParams: TCreateParams): PWinWidgetInfo;
|
||||
begin
|
||||
Result := CreateWidgetInfo(Pointer(AHandle));
|
||||
if Result = nil then Exit;
|
||||
@ -6635,6 +6649,9 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.269 2004/03/18 00:55:56 mattias
|
||||
fixed memleak in gtk opendlg
|
||||
|
||||
Revision 1.268 2004/03/09 15:30:15 peter
|
||||
* fixed gtk2 compilation
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user