Mercurial > gftp.yaz
annotate src/gtk/gftp-gtk.c @ 767:49cfbe02926b
2006-7-13 Brian Masney <masneyb@gftp.org>
* src/gtk/bookmarks.c src/gtk/delete_dialog.c src/gtk/dnd.c
src/gtk/gftp-gtk.c src/gtk/gftp-gtk.h src/gtk/gtkui.c
src/gtk/menu-items.c src/gtk/misc-gtk.c src/gtk/options_dialog.c
src/gtk/transfer.c src/gtk/view_dialog.c - fixed a few minor warnings
from splint.
author | masneyb |
---|---|
date | Fri, 14 Jul 2006 01:53:42 +0000 |
parents | 87ddbac54d36 |
children | d966cf89a820 |
rev | line source |
---|---|
1 | 1 /*****************************************************************************/ |
2 /* gftp-gtk.c - GTK+ 1.2 port of gftp */ | |
255 | 3 /* Copyright (C) 1998-2003 Brian Masney <masneyb@gftp.org> */ |
1 | 4 /* */ |
5 /* This program is free software; you can redistribute it and/or modify */ | |
6 /* it under the terms of the GNU General Public License as published by */ | |
7 /* the Free Software Foundation; either version 2 of the License, or */ | |
8 /* (at your option) any later version. */ | |
9 /* */ | |
10 /* This program is distributed in the hope that it will be useful, */ | |
11 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ | |
12 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ | |
13 /* GNU General Public License for more details. */ | |
14 /* */ | |
15 /* You should have received a copy of the GNU General Public License */ | |
16 /* along with this program; if not, write to the Free Software */ | |
17 /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA */ | |
18 /*****************************************************************************/ | |
19 | |
20 #include "gftp-gtk.h" | |
33 | 21 static const char cvsid[] = "$Id$"; |
1 | 22 |
23 static GtkItemFactory *log_factory, *dl_factory; | |
24 static GtkWidget * local_frame, * remote_frame, * log_table, * transfer_scroll, | |
604 | 25 * gftpui_command_toolbar; |
1 | 26 |
27 gftp_window_data window1, window2, *other_wdata, *current_wdata; | |
28 GtkWidget * stop_btn, * hostedit, * useredit, * passedit, * portedit, * logwdw, | |
587 | 29 * dlwdw, * protocol_menu, * optionmenu, * gftpui_command_widget, |
604 | 30 * download_left_arrow, * upload_right_arrow, * openurl_btn; |
31 GtkTooltips * openurl_tooltip; | |
1 | 32 GtkAdjustment * logwdw_vadj; |
45 | 33 #if GTK_MAJOR_VERSION > 1 |
1 | 34 GtkTextMark * logwdw_textmark; |
35 #endif | |
36 int local_start, remote_start, trans_start, log_start, tools_start; | |
37 GHashTable * graphic_hash_table = NULL; | |
38 GtkItemFactoryEntry * menus = NULL; | |
39 GtkItemFactory * factory = NULL; | |
40 pthread_mutex_t log_mutex = PTHREAD_MUTEX_INITIALIZER; | |
19 | 41 gftp_graphic * gftp_icon; |
56 | 42 pthread_t main_thread_id; |
129 | 43 GList * viewedit_processes = NULL; |
42 | 44 |
48 | 45 static int |
46 get_column (GtkCListColumn * col) | |
1 | 47 { |
48 | 48 if (col->auto_resize) |
49 return (0); | |
50 else if (!col->visible) | |
51 return (-1); | |
52 else | |
53 return (col->width); | |
54 } | |
42 | 55 |
1 | 56 |
48 | 57 static void |
505 | 58 _gftp_exit (GtkWidget * widget, gpointer data) |
48 | 59 { |
616 | 60 const char *tempstr; |
472 | 61 intptr_t ret; |
129 | 62 |
63 ret = GTK_WIDGET (local_frame)->allocation.width; | |
227 | 64 gftp_set_global_option ("listbox_local_width", GINT_TO_POINTER (ret)); |
129 | 65 ret = GTK_WIDGET (remote_frame)->allocation.width; |
227 | 66 gftp_set_global_option ("listbox_remote_width", GINT_TO_POINTER (ret)); |
129 | 67 ret = GTK_WIDGET (remote_frame)->allocation.height; |
227 | 68 gftp_set_global_option ("listbox_file_height", GINT_TO_POINTER (ret)); |
129 | 69 ret = GTK_WIDGET (log_table)->allocation.height; |
227 | 70 gftp_set_global_option ("log_height", GINT_TO_POINTER (ret)); |
129 | 71 ret = GTK_WIDGET (transfer_scroll)->allocation.height; |
227 | 72 gftp_set_global_option ("transfer_height", GINT_TO_POINTER (ret)); |
129 | 73 |
74 ret = get_column (>K_CLIST (dlwdw)->column[0]); | |
227 | 75 gftp_set_global_option ("file_trans_column", GINT_TO_POINTER (ret)); |
1 | 76 |
129 | 77 ret = get_column (>K_CLIST (window1.listbox)->column[1]); |
227 | 78 gftp_set_global_option ("local_file_width", GINT_TO_POINTER (ret)); |
129 | 79 ret = get_column (>K_CLIST (window1.listbox)->column[2]); |
227 | 80 gftp_set_global_option ("local_size_width", GINT_TO_POINTER (ret)); |
129 | 81 ret = get_column (>K_CLIST (window1.listbox)->column[3]); |
227 | 82 gftp_set_global_option ("local_user_width", GINT_TO_POINTER (ret)); |
129 | 83 ret = get_column (>K_CLIST (window1.listbox)->column[4]); |
227 | 84 gftp_set_global_option ("local_group_width", GINT_TO_POINTER (ret)); |
129 | 85 ret = get_column (>K_CLIST (window1.listbox)->column[5]); |
227 | 86 gftp_set_global_option ("local_date_width", GINT_TO_POINTER (ret)); |
129 | 87 ret = get_column (>K_CLIST (window1.listbox)->column[6]); |
227 | 88 gftp_set_global_option ("local_attribs_width", GINT_TO_POINTER (ret)); |
1 | 89 |
129 | 90 ret = get_column (>K_CLIST (window2.listbox)->column[1]); |
227 | 91 gftp_set_global_option ("remote_file_width", GINT_TO_POINTER (ret)); |
129 | 92 ret = get_column (>K_CLIST (window2.listbox)->column[2]); |
227 | 93 gftp_set_global_option ("remote_size_width", GINT_TO_POINTER (ret)); |
129 | 94 ret = get_column (>K_CLIST (window2.listbox)->column[3]); |
227 | 95 gftp_set_global_option ("remote_user_width", GINT_TO_POINTER (ret)); |
129 | 96 ret = get_column (>K_CLIST (window2.listbox)->column[4]); |
227 | 97 gftp_set_global_option ("remote_group_width", GINT_TO_POINTER (ret)); |
129 | 98 ret = get_column (>K_CLIST (window2.listbox)->column[5]); |
227 | 99 gftp_set_global_option ("remote_date_width", GINT_TO_POINTER (ret)); |
129 | 100 ret = get_column (>K_CLIST (window2.listbox)->column[6]); |
227 | 101 gftp_set_global_option ("remote_attribs_width", GINT_TO_POINTER (ret)); |
37 | 102 |
616 | 103 tempstr = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (hostedit)->entry)); |
104 gftp_set_global_option ("host_value", tempstr); | |
105 | |
106 tempstr = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (portedit)->entry)); | |
107 gftp_set_global_option ("port_value", tempstr); | |
108 | |
109 tempstr = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (useredit)->entry)); | |
110 gftp_set_global_option ("user_value", tempstr); | |
111 | |
201 | 112 gftp_shutdown (); |
48 | 113 exit (0); |
1 | 114 } |
115 | |
116 | |
117 static gint | |
505 | 118 _gftp_try_close (GtkWidget * widget, GdkEvent * event, gpointer data) |
1 | 119 { |
129 | 120 if (gftp_file_transfers == NULL) |
505 | 121 { |
122 _gftp_exit (NULL, NULL); | |
123 return (0); | |
124 } | |
1 | 125 else |
126 { | |
505 | 127 MakeYesNoDialog (_("Exit"), _("There are file transfers in progress.\nAre you sure you want to exit?"), _gftp_exit, NULL, NULL, NULL); |
128 return (1); | |
1 | 129 } |
130 } | |
131 | |
132 | |
133 static void | |
505 | 134 _gftp_force_close (GtkWidget * widget, gpointer data) |
1 | 135 { |
136 exit (0); | |
137 } | |
138 | |
139 | |
48 | 140 static void |
505 | 141 _gftp_menu_exit (GtkWidget * widget, gpointer data) |
1 | 142 { |
505 | 143 if (!_gftp_try_close (widget, NULL, data)) |
144 _gftp_exit (widget, data); | |
48 | 145 } |
1 | 146 |
147 | |
374 | 148 static void |
149 change_setting (gftp_window_data * wdata, int menuitem, GtkWidget * checkmenu) | |
150 { | |
151 switch (menuitem) | |
152 { | |
505 | 153 case GFTP_MENU_ITEM_ASCII: |
374 | 154 gftp_set_global_option ("ascii_transfers", GINT_TO_POINTER(1)); |
155 break; | |
505 | 156 case GFTP_MENU_ITEM_BINARY: |
374 | 157 gftp_set_global_option ("ascii_transfers", GINT_TO_POINTER(0)); |
158 break; | |
505 | 159 case GFTP_MENU_ITEM_WIN1: |
374 | 160 current_wdata = &window1; |
161 other_wdata = &window2; | |
505 | 162 if (wdata->request != NULL) |
374 | 163 update_window_info (); |
164 break; | |
505 | 165 case GFTP_MENU_ITEM_WIN2: |
374 | 166 current_wdata = &window2; |
167 other_wdata = &window1; | |
505 | 168 if (wdata->request != NULL) |
374 | 169 update_window_info (); |
170 break; | |
171 } | |
172 } | |
173 | |
174 | |
175 static void | |
176 _gftpui_gtk_do_openurl (gftp_window_data * wdata, gftp_dialog_data * ddata) | |
177 { | |
425 | 178 const char *tempstr; |
179 char *buf; | |
374 | 180 |
425 | 181 tempstr = gtk_entry_get_text (GTK_ENTRY (ddata->edit)); |
182 if (tempstr != NULL && *tempstr != '\0') | |
183 { | |
184 buf = g_strdup (tempstr); | |
185 destroy_dialog (ddata); | |
186 gftpui_common_cmd_open (wdata, wdata->request, NULL, NULL, buf); | |
187 g_free (buf); | |
188 } | |
374 | 189 } |
190 | |
191 | |
192 static void | |
193 openurl_dialog (gpointer data) | |
194 { | |
195 gftp_window_data * wdata; | |
196 | |
197 wdata = data; | |
198 MakeEditDialog (_("Connect via URL"), _("Enter a URL to connect to"), | |
199 NULL, 1, NULL, gftp_dialog_button_connect, | |
200 _gftpui_gtk_do_openurl, wdata, | |
201 NULL, NULL); | |
202 } | |
203 | |
204 | |
205 static void | |
206 tb_openurl_dialog (gpointer data) | |
207 { | |
208 const char *edttxt; | |
209 | |
210 if (current_wdata->request->stopable) | |
211 { | |
677 | 212 ftp_log (gftp_logging_error, NULL, |
374 | 213 _("%s: Please hit the stop button first to do anything else\n"), |
214 _("OpenURL")); | |
215 return; | |
216 } | |
217 | |
218 edttxt = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (hostedit)->entry)); | |
219 | |
220 if (GFTP_IS_CONNECTED (current_wdata->request)) | |
380 | 221 gftpui_disconnect (current_wdata); |
374 | 222 else if (edttxt != NULL && *edttxt != '\0') |
223 toolbar_hostedit (NULL, NULL); | |
224 else | |
225 openurl_dialog (current_wdata); | |
226 } | |
227 | |
228 | |
514 | 229 static void |
230 gftp_gtk_refresh (gftp_window_data * wdata) | |
231 { | |
232 gftpui_refresh (wdata, 1); | |
233 } | |
234 | |
235 | |
1 | 236 static GtkWidget * |
237 CreateMenus (GtkWidget * parent) | |
238 { | |
505 | 239 int local_len, remote_len, len, i, trans_len, log_len, tools_len; |
1 | 240 GtkAccelGroup *accel_group; |
505 | 241 intptr_t ascii_transfers; |
1 | 242 GtkWidget * tempwid; |
7 | 243 static GtkItemFactoryEntry menu_items[] = { |
12 | 244 {N_("/_FTP"), NULL, 0, 0, MN_("<Branch>")}, |
245 {N_("/FTP/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, | |
505 | 246 {N_("/FTP/Window 1"), NULL, change_setting, GFTP_MENU_ITEM_WIN1, |
247 MN_("<RadioItem>")}, | |
248 {N_("/FTP/Window 2"), NULL, change_setting, GFTP_MENU_ITEM_WIN2, | |
249 MN_("/FTP/Window 1")}, | |
12 | 250 {N_("/FTP/sep"), NULL, 0, 0, MN_("<Separator>")}, |
505 | 251 {N_("/FTP/Ascii"), NULL, change_setting, GFTP_MENU_ITEM_ASCII, |
252 MN_("<RadioItem>")}, | |
253 {N_("/FTP/Binary"), NULL, change_setting, GFTP_MENU_ITEM_BINARY, | |
254 MN_("/FTP/Ascii")}, | |
12 | 255 {N_("/FTP/sep"), NULL, 0, 0, MN_("<Separator>")}, |
256 {N_("/FTP/_Options..."), "<control>O", options_dialog, 0, | |
257 MS_(GTK_STOCK_PREFERENCES)}, | |
258 {N_("/FTP/sep"), NULL, 0, 0, MN_("<Separator>")}, | |
505 | 259 {N_("/FTP/_Quit"), "<control>Q", _gftp_menu_exit, 0, MS_(GTK_STOCK_QUIT)}, |
12 | 260 {N_("/_Local"), NULL, 0, 0, MN_("<Branch>")}, |
261 {N_("/Local/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, | |
536 | 262 {N_("/Local/Open URL..."), "", openurl_dialog, 0, MS_(GTK_STOCK_OPEN)}, |
263 {N_("/Local/Disconnect"), "", gftpui_disconnect, 0, MS_(GTK_STOCK_CLOSE)}, | |
12 | 264 {N_("/Local/sep"), NULL, 0, 0, MN_("<Separator>")}, |
265 {N_("/Local/Change Filespec..."), NULL, change_filespec, 0, MN_(NULL)}, | |
266 {N_("/Local/Show selected"), NULL, show_selected, 0, MN_(NULL)}, | |
267 {N_("/Local/Select All"), NULL, selectall, 0, MN_(NULL)}, | |
268 {N_("/Local/Select All Files"), NULL, selectallfiles, 0, MN_(NULL)}, | |
269 {N_("/Local/Deselect All"), NULL, deselectall, 0, MN_(NULL)}, | |
270 {N_("/Local/sep"), NULL, 0, 0, MN_("<Separator>")}, | |
14
83090328581e
* More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents:
12
diff
changeset
|
271 {N_("/Local/Save Directory Listing..."), NULL, save_directory_listing, 0, MN_(NULL)}, |
341 | 272 {N_("/Local/Send SITE Command..."), NULL, gftpui_site_dialog, 0, MN_(NULL)}, |
273 {N_("/Local/Change Directory"), NULL, gftpui_chdir_dialog, 0, MN_(NULL)}, | |
12 | 274 {N_("/Local/Chmod..."), NULL, chmod_dialog, 0, MN_(NULL)}, |
341 | 275 {N_("/Local/Make Directory..."), NULL, gftpui_mkdir_dialog, 0, MN_(NULL)}, |
276 {N_("/Local/Rename..."), NULL, gftpui_rename_dialog, 0, MN_(NULL)}, | |
12 | 277 {N_("/Local/Delete..."), NULL, delete_dialog, 0, MN_(NULL)}, |
278 {N_("/Local/Edit..."), NULL, edit_dialog, 0, MN_(NULL)}, | |
279 {N_("/Local/View..."), NULL, view_dialog, 0, MN_(NULL)}, | |
514 | 280 {N_("/Local/Refresh"), NULL, gftp_gtk_refresh, 0, MS_(GTK_STOCK_REFRESH)}, |
12 | 281 {N_("/_Remote"), NULL, 0, 0, MN_("<Branch>")}, |
282 {N_("/Remote/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, | |
283 {N_("/Remote/Open _URL..."), "<control>U", openurl_dialog, 0, | |
284 MS_(GTK_STOCK_OPEN)}, | |
380 | 285 {N_("/Remote/Disconnect"), "<control>D", gftpui_disconnect, 0, |
12 | 286 MS_(GTK_STOCK_CLOSE)}, |
287 {N_("/Remote/sep"), NULL, 0, 0, MN_("<Separator>")}, | |
288 {N_("/Remote/Change Filespec..."), NULL, change_filespec, 0, MN_(NULL)}, | |
289 {N_("/Remote/Show selected"), NULL, show_selected, 0, MN_(NULL)}, | |
290 {N_("/Remote/Select All"), NULL, selectall, 0, MN_(NULL)}, | |
291 {N_("/Remote/Select All Files"), NULL, selectallfiles, 0, MN_(NULL)}, | |
292 {N_("/Remote/Deselect All"), NULL, deselectall, 0, MN_(NULL)}, | |
293 {N_("/Remote/sep"), NULL, 0, 0, MN_("<Separator>")}, | |
14
83090328581e
* More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents:
12
diff
changeset
|
294 {N_("/Remote/Save Directory Listing..."), NULL, save_directory_listing, 0, MN_(NULL)}, |
341 | 295 {N_("/Remote/Send SITE Command..."), NULL, gftpui_site_dialog, 0, MN_(NULL)}, |
296 {N_("/Remote/Change Directory"), NULL, gftpui_chdir_dialog, 0, MN_(NULL)}, | |
12 | 297 {N_("/Remote/Chmod..."), NULL, chmod_dialog, 0, MN_(NULL)}, |
341 | 298 {N_("/Remote/Make Directory..."), NULL, gftpui_mkdir_dialog, 0, MN_(NULL)}, |
299 {N_("/Remote/Rename..."), NULL, gftpui_rename_dialog, 0, MN_(NULL)}, | |
12 | 300 {N_("/Remote/Delete..."), NULL, delete_dialog, 0, MN_(NULL)}, |
301 {N_("/Remote/Edit..."), NULL, edit_dialog, 0, MN_(NULL)}, | |
302 {N_("/Remote/View..."), NULL, view_dialog, 0, MN_(NULL)}, | |
514 | 303 {N_("/Remote/Refresh"), NULL, gftp_gtk_refresh, 0, MS_(GTK_STOCK_REFRESH)}, |
12 | 304 {N_("/_Bookmarks"), NULL, 0, 0, MN_("<Branch>")}, |
305 {N_("/Bookmarks/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, | |
758 | 306 {N_("/Bookmarks/Add bookmark"), "<control>B", add_bookmark, 0, |
12 | 307 MS_(GTK_STOCK_ADD)}, |
308 {N_("/Bookmarks/Edit bookmarks"), NULL, edit_bookmarks, 0, MN_(NULL)}, | |
309 {N_("/Bookmarks/sep"), NULL, 0, 0, MN_("<Separator>")}, | |
310 {N_("/_Transfers"), NULL, 0, 0, MN_("<Branch>")}, | |
311 {N_("/Transfers/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, | |
312 {N_("/Transfers/Start Transfer"), NULL, start_transfer, 0, MN_(NULL)}, | |
313 {N_("/Transfers/Stop Transfer"), NULL, stop_transfer, 0, | |
314 MS_(GTK_STOCK_STOP)}, | |
315 {N_("/Transfers/sep"), NULL, 0, 0, MN_("<Separator>")}, | |
316 {N_("/Transfers/Skip Current File"), NULL, skip_transfer, 0, MN_(NULL)}, | |
317 {N_("/Transfers/Remove File"), NULL, remove_file_transfer, 0, | |
318 MS_(GTK_STOCK_DELETE)}, | |
586 | 319 {N_("/Transfers/Move File Up"), NULL, move_transfer_up, 0, |
12 | 320 MS_(GTK_STOCK_GO_UP)}, |
586 | 321 {N_("/Transfers/Move File Down"), NULL, move_transfer_down, 0, |
12 | 322 MS_(GTK_STOCK_GO_DOWN)}, |
323 {N_("/Transfers/sep"), NULL, 0, 0, MN_("<Separator>")}, | |
324 {N_("/Transfers/Retrieve Files"), "<control>R", get_files, 0, MN_(NULL)}, | |
325 {N_("/Transfers/Put Files"), "<control>P", put_files, 0, MN_(NULL)}, | |
326 {N_("/L_ogging"), NULL, 0, 0, MN_("<Branch>")}, | |
327 {N_("/Logging/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, | |
328 {N_("/Logging/Clear"), NULL, clearlog, 0, MS_(GTK_STOCK_CLEAR)}, | |
562 | 329 {N_("/Logging/View log"), NULL, viewlog, 0, MN_(NULL)}, |
12 | 330 {N_("/Logging/Save log..."), NULL, savelog, 0, MS_(GTK_STOCK_SAVE)}, |
331 {N_("/Tool_s"), NULL, 0, 0, MN_("<Branch>")}, | |
332 {N_("/Tools/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, | |
333 {N_("/Tools/Compare Windows"), NULL, compare_windows, 0, MN_(NULL)}, | |
334 {N_("/Tools/Clear Cache"), NULL, clear_cache, 0, MS_(GTK_STOCK_CLEAR)}, | |
615 | 335 {N_("/Help"), NULL, 0, 0, MN_("<Branch>")}, |
12 | 336 {N_("/Help/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, |
562 | 337 {N_("/Help/About"), NULL, about_dialog, 0, MS_(GTK_STOCK_HELP)} |
1 | 338 }; |
339 | |
340 menus = menu_items; | |
341 | |
342 accel_group = gtk_accel_group_new (); | |
7 | 343 factory = item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group, NULL); |
1 | 344 |
345 i = 0; | |
346 len = 11; | |
347 /* FTP Menu */ | |
348 create_item_factory (factory, len, menu_items, &window2); | |
349 | |
350 i += len; | |
351 /* Local Menu */ | |
352 local_start = i; | |
14
83090328581e
* More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents:
12
diff
changeset
|
353 local_len = 21; |
1 | 354 create_item_factory (factory, local_len, menu_items + i, &window1); |
355 | |
356 i += local_len; | |
357 /* Remote Menu */ | |
358 remote_start = i; | |
14
83090328581e
* More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents:
12
diff
changeset
|
359 remote_len = 21; |
1 | 360 create_item_factory (factory, remote_len, menu_items + i, &window2); |
361 | |
362 i += remote_len; | |
363 len = 5; | |
364 /* Bookmarks Menu */ | |
365 create_item_factory (factory, len, menu_items + i, &window2); | |
366 | |
367 i += len; | |
368 /* Transfers Menu */ | |
369 trans_start = i; | |
370 trans_len = 12; | |
371 create_item_factory (factory, trans_len, menu_items + i, NULL); | |
372 | |
373 i += trans_len; | |
374 /* Logging Menu */ | |
375 log_start = i; | |
376 log_len = 5; | |
377 create_item_factory (factory, log_len, menu_items + i, NULL); | |
378 | |
379 i += log_len; | |
380 /* Tools Menu */ | |
381 tools_start = i; | |
382 tools_len = 4; | |
383 create_item_factory (factory, tools_len, menu_items + i, NULL); | |
384 | |
385 i += tools_len; | |
386 /* Help Menu */ | |
387 create_item_factory (factory, 3, menu_items + i, NULL); | |
388 | |
389 build_bookmarks_menu (); | |
390 | |
44 | 391 gtk_window_add_accel_group (GTK_WINDOW (parent), accel_group); |
1 | 392 |
245 | 393 gftp_lookup_global_option ("ascii_transfers", &ascii_transfers); |
394 if (ascii_transfers) | |
395 { | |
396 tempwid = gtk_item_factory_get_widget (factory, menu_items[5].path); | |
397 gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (tempwid), TRUE); | |
398 } | |
399 else | |
400 { | |
401 tempwid = gtk_item_factory_get_widget (factory, menu_items[6].path); | |
402 gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (tempwid), TRUE); | |
403 } | |
1 | 404 |
7 | 405 tempwid = gtk_item_factory_get_widget (factory, menu_items[3].path); |
1 | 406 gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (tempwid), TRUE); |
407 | |
7 | 408 window1.ifactory = item_factory_new (GTK_TYPE_MENU, "<local>", NULL, "/Local"); |
409 create_item_factory (window1.ifactory, local_len - 2, menu_items + local_start + 2, &window1); | |
410 | |
411 window2.ifactory = item_factory_new (GTK_TYPE_MENU, "<remote>", NULL, "/Remote"); | |
412 create_item_factory (window2.ifactory, remote_len - 2, menu_items + remote_start + 2, &window2); | |
1 | 413 |
7 | 414 log_factory = item_factory_new (GTK_TYPE_MENU, "<log>", NULL, "/Logging"); |
415 create_item_factory (log_factory, log_len - 2, menu_items + log_start + 2, NULL); | |
1 | 416 |
7 | 417 dl_factory = item_factory_new (GTK_TYPE_MENU, "<download>", NULL, "/Transfers"); |
418 create_item_factory (dl_factory, trans_len - 2, menu_items + trans_start + 2, NULL); | |
1 | 419 |
420 return (factory->widget); | |
421 } | |
422 | |
423 | |
424 static GtkWidget * | |
341 | 425 CreateConnectToolbar (GtkWidget * parent) |
1 | 426 { |
427 const GtkTargetEntry possible_types[] = { | |
428 {"STRING", 0, 0}, | |
429 {"text/plain", 0, 0}, | |
430 {"application/x-rootwin-drop", 0, 1} | |
431 }; | |
432 GtkWidget *toolbar, *box, *tempwid; | |
129 | 433 gftp_config_list_vars * tmplistvar; |
616 | 434 char *default_protocol, *tempstr; |
1 | 435 int i, num; |
436 | |
437 toolbar = gtk_handle_box_new (); | |
438 | |
439 box = gtk_hbox_new (FALSE, 4); | |
440 gtk_container_add (GTK_CONTAINER (toolbar), box); | |
441 gtk_container_border_width (GTK_CONTAINER (box), 5); | |
442 | |
604 | 443 openurl_tooltip = gtk_tooltips_new (); |
444 | |
1 | 445 tempwid = toolbar_pixmap (parent, "connect.xpm"); |
446 openurl_btn = gtk_button_new (); | |
447 gtk_container_add (GTK_CONTAINER (openurl_btn), tempwid); | |
448 gtk_signal_connect_object (GTK_OBJECT (openurl_btn), "clicked", | |
449 GTK_SIGNAL_FUNC (tb_openurl_dialog), NULL); | |
450 gtk_signal_connect (GTK_OBJECT (openurl_btn), "drag_data_received", | |
451 GTK_SIGNAL_FUNC (openurl_get_drag_data), NULL); | |
452 gtk_drag_dest_set (openurl_btn, GTK_DEST_DEFAULT_ALL, possible_types, 2, | |
453 GDK_ACTION_COPY | GDK_ACTION_MOVE); | |
454 gtk_container_border_width (GTK_CONTAINER (openurl_btn), 1); | |
455 gtk_box_pack_start (GTK_BOX (box), openurl_btn, FALSE, FALSE, 0); | |
456 | |
615 | 457 #if GTK_MAJOR_VERSION == 1 |
1 | 458 tempwid = gtk_label_new (_("Host: ")); |
615 | 459 #else |
460 tempwid = gtk_label_new_with_mnemonic (_("_Host: ")); | |
461 #endif | |
462 | |
1 | 463 gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); |
464 | |
465 hostedit = gtk_combo_new (); | |
466 gtk_combo_set_case_sensitive (GTK_COMBO (hostedit), 1); | |
467 gtk_widget_set_size_request (hostedit, 130, -1); | |
468 | |
469 gtk_signal_connect (GTK_OBJECT (GTK_COMBO (hostedit)->entry), "activate", | |
470 GTK_SIGNAL_FUNC (toolbar_hostedit), NULL); | |
129 | 471 |
472 gftp_lookup_global_option ("hosthistory", &tmplistvar); | |
473 if (tmplistvar->list) | |
474 gtk_combo_set_popdown_strings (GTK_COMBO (hostedit), tmplistvar->list); | |
475 | |
1 | 476 gtk_combo_disable_activate (GTK_COMBO (hostedit)); |
616 | 477 |
478 gftp_lookup_global_option ("host_value", &tempstr); | |
479 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (hostedit)->entry), tempstr); | |
615 | 480 #if GTK_MAJOR_VERSION > 1 |
481 gtk_label_set_mnemonic_widget (GTK_LABEL (tempwid), | |
482 GTK_COMBO (hostedit)->entry); | |
483 #endif | |
1 | 484 gtk_box_pack_start (GTK_BOX (box), hostedit, TRUE, TRUE, 0); |
485 | |
486 tempwid = gtk_label_new (_("Port: ")); | |
487 gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); | |
488 | |
489 portedit = gtk_combo_new (); | |
490 gtk_combo_set_case_sensitive (GTK_COMBO (portedit), 1); | |
542 | 491 gtk_widget_set_size_request (portedit, 50, -1); |
1 | 492 |
493 gtk_signal_connect (GTK_OBJECT (GTK_COMBO (portedit)->entry), "activate", | |
494 GTK_SIGNAL_FUNC (toolbar_hostedit), NULL); | |
129 | 495 |
496 gftp_lookup_global_option ("porthistory", &tmplistvar); | |
497 if (tmplistvar->list) | |
498 gtk_combo_set_popdown_strings (GTK_COMBO (portedit), tmplistvar->list); | |
499 | |
1 | 500 gtk_combo_disable_activate (GTK_COMBO (portedit)); |
616 | 501 |
502 gftp_lookup_global_option ("port_value", &tempstr); | |
503 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (portedit)->entry), tempstr); | |
1 | 504 gtk_box_pack_start (GTK_BOX (box), portedit, FALSE, FALSE, 0); |
505 | |
615 | 506 #if GTK_MAJOR_VERSION == 1 |
1 | 507 tempwid = gtk_label_new (_("User: ")); |
615 | 508 #else |
509 tempwid = gtk_label_new_with_mnemonic (_("_User: ")); | |
510 #endif | |
1 | 511 gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); |
512 | |
513 useredit = gtk_combo_new (); | |
514 gtk_combo_set_case_sensitive (GTK_COMBO (useredit), 1); | |
515 gtk_widget_set_size_request (useredit, 75, -1); | |
516 | |
517 gtk_signal_connect (GTK_OBJECT (GTK_COMBO (useredit)->entry), "activate", | |
518 GTK_SIGNAL_FUNC (toolbar_hostedit), NULL); | |
129 | 519 |
520 gftp_lookup_global_option ("userhistory", &tmplistvar); | |
521 if (tmplistvar->list) | |
522 gtk_combo_set_popdown_strings (GTK_COMBO (useredit), tmplistvar->list); | |
523 | |
1 | 524 gtk_combo_disable_activate (GTK_COMBO (useredit)); |
616 | 525 |
526 gftp_lookup_global_option ("user_value", &tempstr); | |
527 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (useredit)->entry), tempstr); | |
615 | 528 #if GTK_MAJOR_VERSION > 1 |
529 gtk_label_set_mnemonic_widget (GTK_LABEL (tempwid), | |
530 GTK_COMBO (useredit)->entry); | |
531 #endif | |
1 | 532 gtk_box_pack_start (GTK_BOX (box), useredit, TRUE, TRUE, 0); |
533 | |
534 tempwid = gtk_label_new (_("Pass: ")); | |
535 gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); | |
536 | |
537 passedit = gtk_entry_new (); | |
538 gtk_widget_set_size_request (passedit, 55, -1); | |
539 | |
540 gtk_entry_set_visibility (GTK_ENTRY (passedit), FALSE); | |
541 gtk_signal_connect (GTK_OBJECT (passedit), "activate", | |
542 GTK_SIGNAL_FUNC (toolbar_hostedit), NULL); | |
543 gtk_box_pack_start (GTK_BOX (box), passedit, FALSE, FALSE, 0); | |
544 | |
545 tempwid = gtk_vbox_new (FALSE, 0); | |
546 gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); | |
547 | |
548 optionmenu = gtk_option_menu_new (); | |
549 gtk_box_pack_start (GTK_BOX (tempwid), optionmenu, TRUE, FALSE, 0); | |
550 | |
551 num = 0; | |
129 | 552 gftp_lookup_global_option ("default_protocol", &default_protocol); |
1 | 553 protocol_menu = gtk_menu_new (); |
554 for (i = 0; gftp_protocols[i].name; i++) | |
555 { | |
556 if (!gftp_protocols[i].shown) | |
557 continue; | |
558 | |
129 | 559 if (default_protocol != NULL && |
560 strcmp (gftp_protocols[i].name, default_protocol) == 0) | |
1 | 561 num = i; |
562 | |
563 tempwid = gtk_menu_item_new_with_label (gftp_protocols[i].name); | |
129 | 564 gtk_object_set_user_data (GTK_OBJECT (tempwid), GINT_TO_POINTER(i)); |
1 | 565 gtk_menu_append (GTK_MENU (protocol_menu), tempwid); |
566 gtk_widget_show (tempwid); | |
567 } | |
568 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), protocol_menu); | |
569 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), num); | |
570 | |
45 | 571 #if GTK_MAJOR_VERSION == 1 |
21 | 572 tempwid = toolbar_pixmap (parent, "stop.xpm"); |
19 | 573 #else |
574 tempwid = gtk_image_new_from_stock (GTK_STOCK_STOP, | |
575 GTK_ICON_SIZE_LARGE_TOOLBAR); | |
576 #endif | |
577 | |
1 | 578 stop_btn = gtk_button_new (); |
604 | 579 |
1 | 580 gtk_container_add (GTK_CONTAINER (stop_btn), tempwid); |
581 gtk_widget_set_sensitive (stop_btn, 0); | |
582 gtk_signal_connect_object (GTK_OBJECT (stop_btn), "clicked", | |
583 GTK_SIGNAL_FUNC (stop_button), NULL); | |
584 gtk_container_border_width (GTK_CONTAINER (stop_btn), 1); | |
585 gtk_box_pack_start (GTK_BOX (box), stop_btn, FALSE, FALSE, 0); | |
586 | |
326 | 587 gtk_widget_grab_focus (GTK_COMBO (hostedit)->entry); |
341 | 588 |
1 | 589 return (toolbar); |
590 } | |
591 | |
592 | |
341 | 593 static GtkWidget * |
594 CreateCommandToolbar (void) | |
595 { | |
596 GtkWidget * box, * tempwid; | |
597 | |
598 gftpui_command_toolbar = gtk_handle_box_new (); | |
599 | |
600 box = gtk_hbox_new (FALSE, 4); | |
601 gtk_container_add (GTK_CONTAINER (gftpui_command_toolbar), box); | |
602 gtk_container_border_width (GTK_CONTAINER (box), 5); | |
603 | |
604 tempwid = gtk_label_new (_("Command: ")); | |
605 gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); | |
606 | |
607 gftpui_command_widget = gtk_entry_new (); | |
608 gtk_box_pack_start (GTK_BOX (box), gftpui_command_widget, TRUE, TRUE, 0); | |
609 gtk_signal_connect (GTK_OBJECT (gftpui_command_widget), "activate", | |
610 GTK_SIGNAL_FUNC (gftpui_run_command), NULL); | |
611 | |
612 return (gftpui_command_toolbar); | |
613 } | |
614 | |
615 | |
1 | 616 static void |
48 | 617 setup_column (GtkWidget * listbox, int column, int width) |
1 | 618 { |
48 | 619 if (width == 0) |
620 gtk_clist_set_column_auto_resize (GTK_CLIST (listbox), column, TRUE); | |
621 else if (width == -1) | |
622 gtk_clist_set_column_visibility (GTK_CLIST (listbox), column, FALSE); | |
623 else | |
624 gtk_clist_set_column_width (GTK_CLIST (listbox), column, width); | |
1 | 625 } |
626 | |
627 | |
48 | 628 static void |
629 list_doaction (gftp_window_data * wdata) | |
1 | 630 { |
326 | 631 intptr_t list_dblclk_action; |
48 | 632 GList *templist, *filelist; |
633 gftp_file *tempfle; | |
499 | 634 int num, success; |
341 | 635 char *directory; |
48 | 636 |
129 | 637 gftp_lookup_request_option (wdata->request, "list_dblclk_action", |
638 &list_dblclk_action); | |
639 | |
48 | 640 filelist = wdata->files; |
525 | 641 templist = gftp_gtk_get_list_selection (wdata); |
48 | 642 num = 0; |
643 templist = get_next_selection (templist, &filelist, &num); | |
644 tempfle = (gftp_file *) filelist->data; | |
645 | |
337 | 646 if (check_reconnect (wdata) < 0) |
647 return; | |
648 | |
499 | 649 if (S_ISLNK (tempfle->st_mode) || S_ISDIR (tempfle->st_mode)) |
341 | 650 { |
555 | 651 directory = gftp_build_path (wdata->request, wdata->request->directory, |
652 tempfle->file, NULL); | |
341 | 653 success = gftpui_run_chdir (wdata, directory); |
654 g_free (directory); | |
655 } | |
656 else | |
657 success = 0; | |
1 | 658 |
499 | 659 if (!S_ISDIR (tempfle->st_mode) && !success) |
1 | 660 { |
129 | 661 switch (list_dblclk_action) |
48 | 662 { |
663 case 0: | |
664 view_dialog (wdata); | |
665 break; | |
666 case 1: | |
667 edit_dialog (wdata); | |
668 break; | |
669 case 2: | |
670 if (wdata == &window2) | |
671 get_files (wdata); | |
672 else | |
673 put_files (wdata); | |
674 break; | |
675 } | |
1 | 676 } |
677 } | |
678 | |
679 | |
48 | 680 static gint |
681 list_enter (GtkWidget * widget, GdkEventKey * event, gpointer data) | |
682 { | |
683 gftp_window_data * wdata; | |
684 | |
685 wdata = data; | |
686 if (!GFTP_IS_CONNECTED (wdata->request)) | |
687 return (TRUE); | |
688 | |
689 if (event->type == GDK_KEY_PRESS && | |
690 (event->keyval == GDK_KP_Delete || event->keyval == GDK_Delete)) | |
691 { | |
692 delete_dialog (wdata); | |
693 return (FALSE); | |
694 } | |
695 else if (IS_ONE_SELECTED (wdata) && event->type == GDK_KEY_PRESS && | |
696 event->keyval == GDK_Return) | |
697 { | |
698 list_doaction (wdata); | |
699 return (FALSE); | |
700 } | |
701 return (TRUE); | |
702 } | |
703 | |
704 | |
705 static gint | |
706 list_dblclick (GtkWidget * widget, GdkEventButton * event, gpointer data) | |
1 | 707 { |
48 | 708 gftp_window_data * wdata; |
709 | |
710 wdata = data; | |
51 | 711 |
48 | 712 if (event->button == 3) |
713 gtk_item_factory_popup (wdata->ifactory, (guint) event->x_root, | |
714 (guint) event->y_root, 3, event->time); | |
51 | 715 return (FALSE); |
716 } | |
717 | |
48 | 718 |
518 | 719 static void |
51 | 720 select_row_callback (GtkWidget *widget, gint row, gint column, |
721 GdkEventButton *event, gpointer data) | |
722 { | |
723 gftp_window_data * wdata; | |
50 | 724 |
51 | 725 wdata = data; |
50 | 726 |
51 | 727 if (event != NULL && event->type == GDK_2BUTTON_PRESS && event->button == 1 && |
728 GFTP_IS_CONNECTED (wdata->request) && IS_ONE_SELECTED (wdata)) | |
729 list_doaction (wdata); | |
1 | 730 } |
731 | |
732 | |
733 static GtkWidget * | |
129 | 734 CreateFTPWindow (gftp_window_data * wdata) |
1 | 735 { |
736 const GtkTargetEntry possible_types[] = { | |
737 {"STRING", 0, 0}, | |
738 {"text/plain", 0, 0}, | |
739 {"application/x-rootwin-drop", 0, 1} | |
740 }; | |
741 GtkWidget *box, *scroll_list, *parent; | |
326 | 742 intptr_t listbox_file_height, colwidth; |
129 | 743 char *titles[7], tempstr[50]; |
1 | 744 |
745 titles[0] = ""; | |
746 titles[1] = _("Filename"); | |
747 titles[2] = _("Size"); | |
748 titles[3] = _("User"); | |
749 titles[4] = _("Group"); | |
750 titles[5] = _("Date"); | |
751 titles[6] = _("Attribs"); | |
752 | |
753 wdata->request = gftp_request_new (); | |
754 wdata->request->logging_function = ftp_log; | |
755 wdata->filespec = g_malloc0 (2); | |
756 *wdata->filespec = '*'; | |
757 | |
758 parent = gtk_frame_new (NULL); | |
129 | 759 |
760 gftp_lookup_global_option ("listbox_file_height", &listbox_file_height); | |
761 g_snprintf (tempstr, sizeof (tempstr), "listbox_%s_width", wdata->prefix_col_str); | |
762 gftp_lookup_global_option (tempstr, &colwidth); | |
763 gtk_widget_set_size_request (parent, colwidth, listbox_file_height); | |
1 | 764 |
765 gtk_container_border_width (GTK_CONTAINER (parent), 5); | |
766 | |
767 box = gtk_vbox_new (FALSE, 0); | |
768 gtk_container_border_width (GTK_CONTAINER (box), 5); | |
769 gtk_container_add (GTK_CONTAINER (parent), box); | |
770 | |
771 wdata->combo = gtk_combo_new (); | |
772 gtk_combo_set_case_sensitive (GTK_COMBO (wdata->combo), 1); | |
773 gtk_box_pack_start (GTK_BOX (box), wdata->combo, FALSE, FALSE, 0); | |
774 gtk_signal_connect (GTK_OBJECT (GTK_COMBO (wdata->combo)->entry), | |
775 "activate", GTK_SIGNAL_FUNC (chdir_edit), | |
776 (gpointer) wdata); | |
777 if (*wdata->history) | |
778 gtk_combo_set_popdown_strings (GTK_COMBO (wdata->combo), *wdata->history); | |
779 gtk_combo_disable_activate (GTK_COMBO (wdata->combo)); | |
780 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (wdata->combo)->entry), ""); | |
781 | |
782 wdata->hoststxt = gtk_label_new (NULL); | |
783 gtk_misc_set_alignment (GTK_MISC (wdata->hoststxt), 0, 0); | |
784 gtk_box_pack_start (GTK_BOX (box), wdata->hoststxt, FALSE, FALSE, 0); | |
785 | |
786 scroll_list = gtk_scrolled_window_new (NULL, NULL); | |
787 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_list), | |
788 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
789 wdata->listbox = gtk_clist_new_with_titles (7, titles); | |
790 gtk_container_add (GTK_CONTAINER (scroll_list), wdata->listbox); | |
791 gtk_drag_source_set (wdata->listbox, GDK_BUTTON1_MASK, possible_types, 3, | |
792 GDK_ACTION_COPY | GDK_ACTION_MOVE); | |
793 gtk_drag_dest_set (wdata->listbox, GTK_DEST_DEFAULT_ALL, possible_types, 2, | |
794 GDK_ACTION_COPY | GDK_ACTION_MOVE); | |
795 | |
796 gtk_clist_set_selection_mode (GTK_CLIST (wdata->listbox), | |
797 GTK_SELECTION_EXTENDED); | |
798 | |
799 gtk_clist_set_column_width (GTK_CLIST (wdata->listbox), 0, 16); | |
800 gtk_clist_set_column_justification (GTK_CLIST (wdata->listbox), 0, | |
801 GTK_JUSTIFY_CENTER); | |
129 | 802 |
803 g_snprintf (tempstr, sizeof (tempstr), "%s_file_width", wdata->prefix_col_str); | |
804 gftp_lookup_global_option (tempstr, &colwidth); | |
805 setup_column (wdata->listbox, 1, colwidth); | |
806 | |
1 | 807 gtk_clist_set_column_justification (GTK_CLIST (wdata->listbox), 2, |
808 GTK_JUSTIFY_RIGHT); | |
129 | 809 |
810 g_snprintf (tempstr, sizeof (tempstr), "%s_size_width", wdata->prefix_col_str); | |
811 gftp_lookup_global_option (tempstr, &colwidth); | |
812 setup_column (wdata->listbox, 2, colwidth); | |
813 | |
814 g_snprintf (tempstr, sizeof (tempstr), "%s_user_width", wdata->prefix_col_str); | |
815 gftp_lookup_global_option (tempstr, &colwidth); | |
816 setup_column (wdata->listbox, 3, colwidth); | |
817 | |
818 g_snprintf (tempstr, sizeof (tempstr), "%s_group_width", wdata->prefix_col_str); | |
819 gftp_lookup_global_option (tempstr, &colwidth); | |
820 setup_column (wdata->listbox, 4, colwidth); | |
821 | |
822 g_snprintf (tempstr, sizeof (tempstr), "%s_date_width", wdata->prefix_col_str); | |
823 gftp_lookup_global_option (tempstr, &colwidth); | |
824 setup_column (wdata->listbox, 5, colwidth); | |
825 | |
826 g_snprintf (tempstr, sizeof (tempstr), "%s_attribs_width", wdata->prefix_col_str); | |
827 gftp_lookup_global_option (tempstr, &colwidth); | |
828 setup_column (wdata->listbox, 6, colwidth); | |
829 | |
1 | 830 gtk_box_pack_start (GTK_BOX (box), scroll_list, TRUE, TRUE, 0); |
831 gtk_signal_connect (GTK_OBJECT (wdata->listbox), "click_column", | |
832 GTK_SIGNAL_FUNC (sortrows), (gpointer) wdata); | |
833 gtk_signal_connect (GTK_OBJECT (wdata->listbox), "drag_data_get", | |
834 GTK_SIGNAL_FUNC (listbox_drag), (gpointer) wdata); | |
835 gtk_signal_connect (GTK_OBJECT (wdata->listbox), "drag_data_received", | |
836 GTK_SIGNAL_FUNC (listbox_get_drag_data), | |
837 (gpointer) wdata); | |
838 gtk_signal_connect_after (GTK_OBJECT (wdata->listbox), "key_press_event", | |
839 GTK_SIGNAL_FUNC (list_enter), (gpointer) wdata); | |
51 | 840 gtk_signal_connect (GTK_OBJECT (wdata->listbox), "select_row", |
841 GTK_SIGNAL_FUNC(select_row_callback), | |
842 (gpointer) wdata); | |
1 | 843 gtk_signal_connect_after (GTK_OBJECT (wdata->listbox), "button_press_event", |
844 GTK_SIGNAL_FUNC (list_dblclick), (gpointer) wdata); | |
845 return (parent); | |
846 } | |
847 | |
848 | |
849 static gint | |
850 menu_mouse_click (GtkWidget * widget, GdkEventButton * event, gpointer data) | |
851 { | |
518 | 852 GtkItemFactory *mfactory; |
1 | 853 |
518 | 854 mfactory = (GtkItemFactory *) data; |
1 | 855 if (event->button == 3) |
518 | 856 gtk_item_factory_popup (mfactory, (guint) event->x_root, |
1 | 857 (guint) event->y_root, 3, event->time); |
858 return (FALSE); | |
859 } | |
860 | |
861 | |
48 | 862 static GtkWidget * |
863 CreateFTPWindows (GtkWidget * ui) | |
1 | 864 { |
587 | 865 GtkWidget *box, *dlbox, *winpane, *dlpane, *logpane, *mainvbox, *tempwid; |
129 | 866 gftp_config_list_vars * tmplistvar; |
48 | 867 char *dltitles[2]; |
326 | 868 intptr_t tmplookup; |
48 | 869 #if GTK_MAJOR_VERSION > 1 |
870 GtkTextBuffer * textbuf; | |
871 GtkTextIter iter; | |
872 GtkTextTag *tag; | |
129 | 873 GdkColor * fore; |
48 | 874 #endif |
875 | |
876 memset (&window1, 0, sizeof (window1)); | |
877 memset (&window2, 0, sizeof (window2)); | |
129 | 878 |
879 gftp_lookup_global_option ("localhistory", &tmplistvar); | |
880 window1.history = &tmplistvar->list; | |
881 window1.histlen = &tmplistvar->num_items; | |
882 | |
883 gftp_lookup_global_option ("remotehistory", &tmplistvar); | |
884 window2.history = &tmplistvar->list; | |
885 window2.histlen = &tmplistvar->num_items; | |
48 | 886 |
887 mainvbox = gtk_vbox_new (FALSE, 0); | |
888 | |
889 tempwid = CreateMenus (ui); | |
890 gtk_box_pack_start (GTK_BOX (mainvbox), tempwid, FALSE, FALSE, 0); | |
1 | 891 |
341 | 892 tempwid = CreateConnectToolbar (ui); |
893 gtk_box_pack_start (GTK_BOX (mainvbox), tempwid, FALSE, FALSE, 0); | |
894 | |
895 tempwid = CreateCommandToolbar (); | |
48 | 896 gtk_box_pack_start (GTK_BOX (mainvbox), tempwid, FALSE, FALSE, 0); |
897 | |
898 winpane = gtk_hpaned_new (); | |
899 | |
900 box = gtk_hbox_new (FALSE, 0); | |
901 | |
129 | 902 window1.prefix_col_str = "local"; |
903 local_frame = CreateFTPWindow (&window1); | |
48 | 904 gtk_box_pack_start (GTK_BOX (box), local_frame, TRUE, TRUE, 0); |
905 | |
906 dlbox = gtk_vbox_new (FALSE, 0); | |
907 gtk_container_border_width (GTK_CONTAINER (dlbox), 5); | |
908 gtk_box_pack_start (GTK_BOX (box), dlbox, FALSE, FALSE, 0); | |
909 | |
910 #if GTK_MAJOR_VERSION == 1 | |
911 tempwid = toolbar_pixmap (ui, "right.xpm"); | |
912 #else | |
913 tempwid = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, | |
914 GTK_ICON_SIZE_SMALL_TOOLBAR); | |
915 #endif | |
916 | |
587 | 917 upload_right_arrow = gtk_button_new (); |
918 gtk_box_pack_start (GTK_BOX (dlbox), upload_right_arrow, TRUE, FALSE, 0); | |
919 gtk_signal_connect_object (GTK_OBJECT (upload_right_arrow), "clicked", | |
48 | 920 GTK_SIGNAL_FUNC (put_files), NULL); |
587 | 921 gtk_container_add (GTK_CONTAINER (upload_right_arrow), tempwid); |
1 | 922 |
45 | 923 #if GTK_MAJOR_VERSION == 1 |
48 | 924 tempwid = toolbar_pixmap (ui, "left.xpm"); |
1 | 925 #else |
48 | 926 tempwid = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, |
927 GTK_ICON_SIZE_SMALL_TOOLBAR); | |
1 | 928 #endif |
48 | 929 |
587 | 930 download_left_arrow = gtk_button_new (); |
931 gtk_box_pack_start (GTK_BOX (dlbox), download_left_arrow, TRUE, FALSE, 0); | |
932 gtk_signal_connect_object (GTK_OBJECT (download_left_arrow), "clicked", | |
48 | 933 GTK_SIGNAL_FUNC (get_files), NULL); |
587 | 934 gtk_container_add (GTK_CONTAINER (download_left_arrow), tempwid); |
48 | 935 |
936 gtk_paned_pack1 (GTK_PANED (winpane), box, 1, 1); | |
937 | |
129 | 938 window2.prefix_col_str = "remote"; |
939 remote_frame = CreateFTPWindow (&window2); | |
940 | |
48 | 941 gtk_paned_pack2 (GTK_PANED (winpane), remote_frame, 1, 1); |
942 | |
943 dlpane = gtk_vpaned_new (); | |
944 gtk_paned_pack1 (GTK_PANED (dlpane), winpane, 1, 1); | |
945 | |
946 transfer_scroll = gtk_scrolled_window_new (NULL, NULL); | |
129 | 947 gftp_lookup_global_option ("transfer_height", &tmplookup); |
948 gtk_widget_set_size_request (transfer_scroll, -1, tmplookup); | |
48 | 949 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (transfer_scroll), |
950 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
951 | |
952 dltitles[0] = _("Filename"); | |
953 dltitles[1] = _("Progress"); | |
954 dlwdw = gtk_ctree_new_with_titles (2, 0, dltitles); | |
955 gtk_clist_set_selection_mode (GTK_CLIST (dlwdw), GTK_SELECTION_SINGLE); | |
956 gtk_clist_set_reorderable (GTK_CLIST (dlwdw), 0); | |
957 | |
129 | 958 gftp_lookup_global_option ("file_trans_column", &tmplookup); |
959 if (tmplookup == 0) | |
48 | 960 gtk_clist_set_column_auto_resize (GTK_CLIST (dlwdw), 0, TRUE); |
961 else | |
129 | 962 gtk_clist_set_column_width (GTK_CLIST (dlwdw), 0, tmplookup); |
48 | 963 |
115 | 964 gtk_container_add (GTK_CONTAINER (transfer_scroll), dlwdw); |
48 | 965 gtk_signal_connect (GTK_OBJECT (dlwdw), "button_press_event", |
966 GTK_SIGNAL_FUNC (menu_mouse_click), (gpointer) dl_factory); | |
967 gtk_paned_pack2 (GTK_PANED (dlpane), transfer_scroll, 1, 1); | |
968 | |
969 logpane = gtk_vpaned_new (); | |
970 gtk_paned_pack1 (GTK_PANED (logpane), dlpane, 1, 1); | |
971 | |
972 log_table = gtk_table_new (1, 2, FALSE); | |
129 | 973 gftp_lookup_global_option ("log_height", &tmplookup); |
974 gtk_widget_set_size_request (log_table, -1, tmplookup); | |
48 | 975 |
976 #if GTK_MAJOR_VERSION == 1 | |
977 logwdw = gtk_text_new (NULL, NULL); | |
978 | |
979 gtk_text_set_editable (GTK_TEXT (logwdw), FALSE); | |
980 gtk_text_set_word_wrap (GTK_TEXT (logwdw), TRUE); | |
981 | |
982 gtk_table_attach (GTK_TABLE (log_table), logwdw, 0, 1, 0, 1, | |
983 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
984 0, 0); | |
985 gtk_signal_connect (GTK_OBJECT (logwdw), "button_press_event", | |
986 GTK_SIGNAL_FUNC (menu_mouse_click), | |
987 (gpointer) log_factory); | |
988 | |
989 tempwid = gtk_vscrollbar_new (GTK_TEXT (logwdw)->vadj); | |
990 gtk_table_attach (GTK_TABLE (log_table), tempwid, 1, 2, 0, 1, | |
991 GTK_FILL, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); | |
992 logwdw_vadj = GTK_TEXT (logwdw)->vadj; | |
993 #else | |
994 logwdw = gtk_text_view_new (); | |
995 gtk_text_view_set_editable (GTK_TEXT_VIEW (logwdw), FALSE); | |
996 gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (logwdw), FALSE); | |
997 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (logwdw), GTK_WRAP_WORD); | |
998 | |
999 textbuf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logwdw)); | |
1000 | |
1001 tag = gtk_text_buffer_create_tag (textbuf, "send", NULL); | |
129 | 1002 gftp_lookup_global_option ("send_color", &fore); |
1003 g_object_set (G_OBJECT (tag), "foreground_gdk", fore, NULL); | |
48 | 1004 |
1005 tag = gtk_text_buffer_create_tag (textbuf, "recv", NULL); | |
129 | 1006 gftp_lookup_global_option ("recv_color", &fore); |
1007 g_object_set (G_OBJECT (tag), "foreground_gdk", fore, NULL); | |
48 | 1008 |
1009 tag = gtk_text_buffer_create_tag (textbuf, "error", NULL); | |
129 | 1010 gftp_lookup_global_option ("error_color", &fore); |
1011 g_object_set (G_OBJECT (tag), "foreground_gdk", fore, NULL); | |
48 | 1012 |
1013 tag = gtk_text_buffer_create_tag (textbuf, "misc", NULL); | |
129 | 1014 gftp_lookup_global_option ("misc_color", &fore); |
48 | 1015 g_object_set (G_OBJECT (tag), "foreground_gdk", &fore, NULL); |
1016 | |
1017 tempwid = gtk_scrolled_window_new (NULL, NULL); | |
1018 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tempwid), | |
1019 GTK_POLICY_AUTOMATIC, | |
1020 GTK_POLICY_AUTOMATIC); | |
1021 gtk_container_add (GTK_CONTAINER (tempwid), logwdw); | |
1022 gtk_table_attach (GTK_TABLE (log_table), tempwid, 0, 1, 0, 1, | |
1023 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
1024 0, 0); | |
1025 logwdw_vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (tempwid)); | |
1026 gtk_text_buffer_get_iter_at_offset (textbuf, &iter, 0); | |
1027 logwdw_textmark = gtk_text_buffer_create_mark (textbuf, "end", &iter, 1); | |
1028 #endif | |
1029 gtk_paned_pack2 (GTK_PANED (logpane), log_table, 1, 1); | |
1030 gtk_box_pack_start (GTK_BOX (mainvbox), logpane, TRUE, TRUE, 0); | |
1031 | |
1032 gtk_widget_show_all (mainvbox); | |
341 | 1033 gftpui_show_or_hide_command (); |
48 | 1034 return (mainvbox); |
1 | 1035 } |
1036 | |
1037 | |
518 | 1038 static void |
48 | 1039 init_gftp (int argc, char *argv[], GtkWidget * parent) |
1 | 1040 { |
48 | 1041 if (argc == 2 && strncmp (argv[1], "--", 2) != 0) |
1 | 1042 { |
48 | 1043 if (gftp_parse_url (window2.request, argv[1]) == 0) |
767 | 1044 ftp_connect (&window2, window2.request); |
48 | 1045 else |
1046 gftp_usage (); | |
1 | 1047 } |
1048 } | |
1049 | |
1050 | |
1051 void | |
1052 toolbar_hostedit (GtkWidget * widget, gpointer data) | |
1053 { | |
173 | 1054 int (*init) (gftp_request * request); |
129 | 1055 gftp_config_list_vars * tmplistvar; |
1 | 1056 GtkWidget *tempwid; |
1057 const char *txt; | |
1058 int num; | |
1059 | |
1060 if (current_wdata->request->stopable) | |
1061 { | |
677 | 1062 ftp_log (gftp_logging_error, NULL, |
1 | 1063 _("%s: Please hit the stop button first to do anything else\n"), |
1064 _("Connect")); | |
1065 return; | |
1066 } | |
1067 | |
1068 if (GFTP_IS_CONNECTED (current_wdata->request)) | |
640 | 1069 gftp_disconnect (current_wdata->request); |
1 | 1070 |
1071 tempwid = gtk_menu_get_active (GTK_MENU (protocol_menu)); | |
195 | 1072 num = GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (tempwid))); |
1 | 1073 init = gftp_protocols[num].init; |
173 | 1074 if (init (current_wdata->request) < 0) |
1075 return; | |
1 | 1076 |
395 | 1077 txt = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (hostedit)->entry)); |
1078 if (strchr (txt, '/') != NULL) | |
1079 { | |
1080 /* The user entered a URL in the host box... */ | |
1081 gftpui_common_cmd_open (current_wdata, current_wdata->request, NULL, NULL, txt); | |
1082 return; | |
1083 } | |
1084 | |
1085 gftp_set_hostname (current_wdata->request, txt); | |
218 | 1086 if (current_wdata->request->hostname == NULL) |
1087 return; | |
1 | 1088 alltrim (current_wdata->request->hostname); |
1089 | |
1090 if (current_wdata->request->need_hostport && | |
1091 *current_wdata->request->hostname == '\0') | |
1092 { | |
1093 ftp_log (gftp_logging_error, NULL, | |
1094 _("Error: You must type in a host to connect to\n")); | |
1095 return; | |
1096 } | |
1097 | |
129 | 1098 gftp_lookup_global_option ("hosthistory", &tmplistvar); |
1099 add_history (hostedit, &tmplistvar->list, &tmplistvar->num_items, | |
1 | 1100 current_wdata->request->hostname); |
1101 | |
1102 if (strchr (current_wdata->request->hostname, '/') != NULL && | |
1103 gftp_parse_url (current_wdata->request, | |
1104 current_wdata->request->hostname) == 0) | |
1105 { | |
767 | 1106 ftp_connect (current_wdata, current_wdata->request); |
1 | 1107 return; |
1108 } | |
1109 | |
1110 txt = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (portedit)->entry)); | |
1111 gftp_set_port (current_wdata->request, strtol (txt, NULL, 10)); | |
129 | 1112 |
1113 gftp_lookup_global_option ("porthistory", &tmplistvar); | |
1114 add_history (portedit, &tmplistvar->list, &tmplistvar->num_items, txt); | |
1 | 1115 |
1116 gftp_set_username (current_wdata->request, gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (useredit)->entry))); | |
218 | 1117 if (current_wdata->request->username != NULL) |
1118 alltrim (current_wdata->request->username); | |
1119 | |
1 | 1120 |
129 | 1121 gftp_lookup_global_option ("userhistory", &tmplistvar); |
1122 add_history (useredit, &tmplistvar->list, &tmplistvar->num_items, | |
1 | 1123 current_wdata->request->username); |
1124 | |
1125 gftp_set_password (current_wdata->request, | |
1126 gtk_entry_get_text (GTK_ENTRY (passedit))); | |
1127 | |
1128 gftp_set_directory (current_wdata->request, gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (current_wdata->combo)->entry))); | |
218 | 1129 if (current_wdata->request->directory != NULL) |
1130 alltrim (current_wdata->request->directory); | |
1 | 1131 |
1132 add_history (current_wdata->combo, current_wdata->history, | |
1133 current_wdata->histlen, current_wdata->request->directory); | |
1134 | |
767 | 1135 ftp_connect (current_wdata, current_wdata->request); |
1 | 1136 } |
1137 | |
1138 | |
1139 void | |
1140 sortrows (GtkCList * clist, gint column, gpointer data) | |
1141 { | |
129 | 1142 char sortcol_name[25], sortasds_name[25]; |
326 | 1143 intptr_t sortcol, sortasds; |
1 | 1144 gftp_window_data * wdata; |
16 | 1145 GtkWidget * sort_wid; |
1146 GList * templist; | |
472 | 1147 int swap_col; |
1 | 1148 |
1149 wdata = data; | |
505 | 1150 g_snprintf (sortcol_name, sizeof (sortcol_name), "%s_sortcol", |
1151 wdata->prefix_col_str); | |
129 | 1152 gftp_lookup_global_option (sortcol_name, &sortcol); |
505 | 1153 g_snprintf (sortasds_name, sizeof (sortasds_name), "%s_sortasds", |
1154 wdata->prefix_col_str); | |
129 | 1155 gftp_lookup_global_option (sortasds_name, &sortasds); |
1156 | |
1157 if (column == -1) | |
1158 column = sortcol; | |
1159 | |
1160 if (column == 0 || (column == sortcol && wdata->sorted)) | |
1 | 1161 { |
129 | 1162 sortasds = !sortasds; |
227 | 1163 gftp_set_global_option (sortasds_name, GINT_TO_POINTER (sortasds)); |
19 | 1164 swap_col = 1; |
1165 } | |
1166 else | |
1167 swap_col = 0; | |
1168 | |
1169 if (swap_col || !wdata->sorted) | |
1170 { | |
1 | 1171 sort_wid = gtk_clist_get_column_widget (clist, 0); |
1172 gtk_widget_destroy (sort_wid); | |
45 | 1173 #if GTK_MAJOR_VERSION == 1 |
129 | 1174 if (sortasds) |
1 | 1175 sort_wid = toolbar_pixmap (wdata->listbox, "down.xpm"); |
1176 else | |
1177 sort_wid = toolbar_pixmap (wdata->listbox, "up.xpm"); | |
19 | 1178 #else |
129 | 1179 if (sortasds) |
19 | 1180 sort_wid = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, |
1181 GTK_ICON_SIZE_SMALL_TOOLBAR); | |
1182 else | |
1183 sort_wid = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, | |
1184 GTK_ICON_SIZE_SMALL_TOOLBAR); | |
1185 #endif | |
1186 | |
1 | 1187 gtk_clist_set_column_widget (clist, 0, sort_wid); |
1188 } | |
1189 else | |
129 | 1190 { |
1191 sortcol = column; | |
227 | 1192 gftp_set_global_option (sortcol_name, GINT_TO_POINTER (sortcol)); |
129 | 1193 } |
37 | 1194 |
1195 if (!GFTP_IS_CONNECTED (wdata->request)) | |
1196 return; | |
1 | 1197 |
1198 gtk_clist_freeze (clist); | |
1199 gtk_clist_clear (clist); | |
1200 | |
129 | 1201 wdata->files = gftp_sort_filelist (wdata->files, sortcol, sortasds); |
1 | 1202 |
16 | 1203 templist = wdata->files; |
1204 while (templist != NULL) | |
1 | 1205 { |
16 | 1206 add_file_listbox (wdata, templist->data); |
1207 templist = templist->next; | |
1 | 1208 } |
1209 | |
1210 wdata->sorted = 1; | |
1211 gtk_clist_thaw (clist); | |
1212 update_window_info (); | |
1213 } | |
1214 | |
1215 | |
1216 void | |
1217 stop_button (GtkWidget * widget, gpointer data) | |
1218 { | |
1219 pthread_t comptid; | |
1220 | |
1221 memset (&comptid, 0, sizeof (comptid)); | |
1222 if (!pthread_equal (comptid, window1.tid)) | |
1223 pthread_kill (window1.tid, SIGINT); | |
1224 else if (!pthread_equal (comptid, window2.tid)) | |
1225 pthread_kill (window2.tid, SIGINT); | |
1226 } | |
1227 | |
48 | 1228 |
198 | 1229 static int |
1230 gftp_gtk_config_file_read_color (char *str, gftp_config_vars * cv, int line) | |
1231 { | |
1232 char *red, *green, *blue; | |
1233 GdkColor * color; | |
1234 | |
1235 if (cv->flags & GFTP_CVARS_FLAGS_DYNMEM && cv->value != NULL) | |
1236 g_free (cv->value); | |
1237 | |
1238 gftp_config_parse_args (str, 3, line, &red, &green, &blue); | |
1239 | |
1240 color = g_malloc (sizeof (*color)); | |
1241 color->red = strtol (red, NULL, 16); | |
1242 color->green = strtol (green, NULL, 16); | |
1243 color->blue = strtol (blue, NULL, 16); | |
447 | 1244 |
198 | 1245 g_free (red); |
1246 g_free (green); | |
1247 g_free (blue); | |
1248 | |
1249 cv->value = color; | |
1250 cv->flags |= GFTP_CVARS_FLAGS_DYNMEM; | |
1251 | |
1252 return (0); | |
1253 } | |
1254 | |
1255 | |
1256 static int | |
387 | 1257 gftp_gtk_config_file_write_color (gftp_config_vars * cv, char *buf, |
1258 size_t buflen, int to_config_file) | |
198 | 1259 { |
1260 GdkColor * color; | |
1261 | |
1262 color = cv->value; | |
387 | 1263 g_snprintf (buf, buflen, "%x:%x:%x", color->red, color->green, color->blue); |
198 | 1264 return (0); |
1265 } | |
1266 | |
1267 | |
48 | 1268 int |
1269 main (int argc, char **argv) | |
1270 { | |
1271 GtkWidget *window, *ui; | |
1272 | |
447 | 1273 /* We override the read color functions because we are using a GdkColor |
1274 structures to store the color. If I put this in lib/config_file.c, then | |
1275 the core library would be dependant on Gtk+ being present */ | |
1276 gftp_option_types[gftp_option_type_color].read_function = gftp_gtk_config_file_read_color; | |
1277 gftp_option_types[gftp_option_type_color].write_function = gftp_gtk_config_file_write_color; | |
1278 | |
374 | 1279 gftpui_common_init (&argc, &argv, ftp_log); |
498 | 1280 gftpui_common_child_process_done = 0; |
374 | 1281 |
48 | 1282 g_thread_init (NULL); |
496 | 1283 |
1284 #if GTK_MAJOR_VERSION > 1 | |
460 | 1285 gdk_threads_init(); |
496 | 1286 #endif |
460 | 1287 |
56 | 1288 main_thread_id = pthread_self (); |
48 | 1289 gtk_set_locale (); |
1290 gtk_init (&argc, &argv); | |
1291 | |
374 | 1292 graphic_hash_table = g_hash_table_new (string_hash_function, |
1293 string_hash_compare); | |
198 | 1294 |
48 | 1295 window = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
1296 gtk_signal_connect (GTK_OBJECT (window), "delete_event", | |
505 | 1297 GTK_SIGNAL_FUNC (_gftp_try_close), NULL); |
48 | 1298 gtk_signal_connect (GTK_OBJECT (window), "destroy", |
505 | 1299 GTK_SIGNAL_FUNC (_gftp_force_close), NULL); |
129 | 1300 gtk_window_set_title (GTK_WINDOW (window), gftp_version); |
48 | 1301 gtk_window_set_wmclass (GTK_WINDOW(window), "main", "gFTP"); |
129 | 1302 gtk_widget_set_name (window, gftp_version); |
48 | 1303 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE); |
1304 gtk_widget_realize (window); | |
1305 | |
1306 gftp_icon = open_xpm (window, "gftp.xpm"); | |
1307 if (gftp_icon != NULL) | |
1308 { | |
1309 gdk_window_set_icon (window->window, NULL, gftp_icon->pixmap, | |
1310 gftp_icon->bitmap); | |
168 | 1311 gdk_window_set_icon_name (window->window, gftp_version); |
48 | 1312 } |
1313 | |
1314 other_wdata = &window1; | |
1315 current_wdata = &window2; | |
1316 ui = CreateFTPWindows (window); | |
1317 gtk_container_add (GTK_CONTAINER (window), ui); | |
1318 gtk_widget_show (window); | |
1319 | |
341 | 1320 gftpui_common_about (ftp_log, NULL); |
48 | 1321 |
1322 gtk_timeout_add (1000, update_downloads, NULL); | |
173 | 1323 if (gftp_protocols[GFTP_LOCAL_NUM].init (window1.request) == 0) |
1324 { | |
422 | 1325 gftp_setup_startup_directory (window1.request); |
173 | 1326 gftp_connect (window1.request); |
496 | 1327 ftp_list_files (&window1); |
173 | 1328 } |
48 | 1329 |
1330 /* On the remote window, even though we aren't connected, draw the sort | |
1331 icon on that side */ | |
129 | 1332 sortrows (GTK_CLIST (window2.listbox), -1, &window2); |
48 | 1333 |
1334 init_gftp (argc, argv, window); | |
1335 | |
1336 GDK_THREADS_ENTER (); | |
1337 gtk_main (); | |
1338 GDK_THREADS_LEAVE (); | |
374 | 1339 |
48 | 1340 return (0); |
1341 } | |
1342 | |
374 | 1343 |
341 | 1344 void |
1345 gftpui_show_or_hide_command (void) | |
1346 { | |
1347 intptr_t cmd_in_gui; | |
48 | 1348 |
341 | 1349 gftp_lookup_global_option ("cmd_in_gui", &cmd_in_gui); |
1350 if (cmd_in_gui) | |
1351 gtk_widget_show (gftpui_command_toolbar); | |
1352 else | |
1353 gtk_widget_hide (gftpui_command_toolbar); | |
1354 } | |
1355 |