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