1 /*
2 * DO NOT EDIT THIS FILE - it is generated by Glade.
3 */
4
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif
8
9 #include <sys/types.h>
10 #include <sys/stat.h>
11 #include <unistd.h>
12 #include <string.h>
13 #include <stdio.h>
14 #include <pwd.h>
15
16 #include <gdk/gdkkeysyms.h>
17 #include <gtk/gtk.h>
18 #include <vte/vte.h>
19
20 #include "prefs.h"
21 #include "callbacks.h"
22 #include "interface.h"
23 #include "support.h"
24
25 #define GLADE_HOOKUP_OBJECT(component,widget,name) \
26 g_object_set_data_full (G_OBJECT (component), name, \
27 gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
28
29 #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
30 g_object_set_data (G_OBJECT (component), name, widget)
31
32 GtkWidget*
create_window(gtkTermPref * pref)33 create_window (gtkTermPref* pref)
34 {
35 GtkWidget *window;
36 GdkPixbuf *window_icon_pixbuf;
37 GtkWidget *vbox;
38 GtkWidget *menubar;
39 GtkWidget *menuitem1;
40 GtkWidget *menuitem1_menu;
41 GtkWidget *new_tab;
42 GtkWidget *image12;
43 GtkWidget *separatormenuitem1;
44 GtkWidget *close_tab;
45 GtkWidget *image13;
46 GtkWidget *close_window;
47 GtkWidget *image14;
48 //GtkWidget *menuitem2;
49 //GtkWidget *menuitem2_menu;
50 //GtkWidget *copy;
51 //GtkWidget *paste;
52 GtkWidget *menuitem3;
53 GtkWidget *menuitem3_menu;
54 GtkWidget *full_screen;
55 GtkWidget *image15;
56 //GtkWidget *hide_menu;
57 GtkWidget *menuitem4;
58 GtkWidget *menuitem4_menu;
59 GtkWidget *info;
60 GtkWidget *image16;
61 GtkWidget *notebook;
62 //GtkWidget *empty_notebook_page;
63 //GtkWidget *label;
64 GtkAccelGroup *accel_group;
65
66 accel_group = gtk_accel_group_new ();
67
68 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
69 gtk_widget_set_name (window, "window");
70 gtk_window_set_title (GTK_WINDOW (window), _("GTKTerm2"));
71 window_icon_pixbuf = create_pixbuf ("gtkterm2.png");
72 if (window_icon_pixbuf)
73 {
74 gtk_window_set_icon (GTK_WINDOW (window), window_icon_pixbuf);
75 gdk_pixbuf_unref (window_icon_pixbuf);
76 }
77
78 vbox = gtk_vbox_new (FALSE, 0);
79 gtk_widget_set_name (vbox, "vbox");
80 gtk_widget_show (vbox);
81 gtk_container_add (GTK_CONTAINER (window), vbox);
82
83 if(pref->winPosX>0 || pref->winPosY>0)
84 {
85 gtk_window_move(GTK_WINDOW (window), pref->winPosX, pref->winPosY);
86 }
87 if(pref->stealth==TRUE)
88 {
89 gtk_window_set_decorated(GTK_WINDOW (window), FALSE);
90 gtk_window_set_has_frame(GTK_WINDOW(window), FALSE);
91 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(window), TRUE);
92 }
93
94 menubar = gtk_menu_bar_new ();
95 gtk_widget_set_name (menubar, "menubar");
96 gtk_widget_show (menubar);
97 gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
98
99 menuitem1 = gtk_menu_item_new_with_mnemonic (_("File"));
100 gtk_widget_set_name (menuitem1, "menuitem1");
101 gtk_widget_show (menuitem1);
102 gtk_container_add (GTK_CONTAINER (menubar), menuitem1);
103
104 menuitem1_menu = gtk_menu_new ();
105 gtk_widget_set_name (menuitem1_menu, "menuitem1_menu");
106 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menuitem1_menu);
107
108 new_tab = gtk_image_menu_item_new_with_mnemonic (_("New Tab"));
109 gtk_widget_set_name (new_tab, "new_tab");
110 gtk_widget_show (new_tab);
111 gtk_container_add (GTK_CONTAINER (menuitem1_menu), new_tab);
112
113 image12 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
114 gtk_widget_set_name (image12, "image12");
115 gtk_widget_show (image12);
116 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (new_tab), image12);
117
118 separatormenuitem1 = gtk_menu_item_new ();
119 gtk_widget_set_name (separatormenuitem1, "separatormenuitem1");
120 gtk_widget_show (separatormenuitem1);
121 gtk_container_add (GTK_CONTAINER (menuitem1_menu), separatormenuitem1);
122 gtk_widget_set_sensitive (separatormenuitem1, FALSE);
123
124 close_tab = gtk_image_menu_item_new_with_mnemonic (_("Close Tab"));
125 gtk_widget_set_name (close_tab, "close_tab");
126 gtk_widget_show (close_tab);
127 gtk_container_add (GTK_CONTAINER (menuitem1_menu), close_tab);
128
129 image13 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
130 gtk_widget_set_name (image13, "image13");
131 gtk_widget_show (image13);
132 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (close_tab), image13);
133
134 close_window = gtk_image_menu_item_new_with_mnemonic (_("Close Window"));
135 gtk_widget_set_name (close_window, "close_window");
136 gtk_widget_show (close_window);
137 gtk_container_add (GTK_CONTAINER (menuitem1_menu), close_window);
138
139 image14 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU);
140 gtk_widget_set_name (image14, "image14");
141 gtk_widget_show (image14);
142 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (close_window), image14);
143
144 menuitem3 = gtk_menu_item_new_with_mnemonic (_("View"));
145 gtk_widget_set_name (menuitem3, "menuitem3");
146 gtk_widget_show (menuitem3);
147 gtk_container_add (GTK_CONTAINER (menubar), menuitem3);
148
149 menuitem3_menu = gtk_menu_new ();
150 gtk_widget_set_name (menuitem3_menu, "menuitem3_menu");
151 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menuitem3_menu);
152
153 full_screen = gtk_image_menu_item_new_with_mnemonic (_("Full Screen"));
154 gtk_widget_set_name (full_screen, "full_screen");
155 gtk_widget_show (full_screen);
156 gtk_container_add (GTK_CONTAINER (menuitem3_menu), full_screen);
157
158 image15 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU);
159 gtk_widget_set_name (image15, "image15");
160 gtk_widget_show (image15);
161 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (full_screen), image15);
162
163 /*hide_menu = gtk_menu_item_new_with_mnemonic (_("Hide menu"));
164 gtk_widget_set_name (hide_menu, "hide_menu");
165 gtk_widget_show (hide_menu);
166 gtk_container_add (GTK_CONTAINER (menuitem3_menu), hide_menu);*/
167
168 menuitem4 = gtk_menu_item_new_with_mnemonic (_("Help"));
169 gtk_widget_set_name (menuitem4, "menuitem4");
170 gtk_widget_show (menuitem4);
171 gtk_container_add (GTK_CONTAINER (menubar), menuitem4);
172
173 menuitem4_menu = gtk_menu_new ();
174 gtk_widget_set_name (menuitem4_menu, "menuitem4_menu");
175 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menuitem4_menu);
176
177 info = gtk_image_menu_item_new_with_mnemonic (_("Info"));
178 gtk_widget_set_name (info, "info");
179 gtk_widget_show (info);
180 gtk_container_add (GTK_CONTAINER (menuitem4_menu), info);
181 gtk_widget_add_accelerator (info, "activate", accel_group,
182 GDK_F1, 0,
183 GTK_ACCEL_VISIBLE);
184
185 image16 = gtk_image_new_from_stock ("gtk-dialog-info", GTK_ICON_SIZE_MENU);
186 gtk_widget_set_name (image16, "image16");
187 gtk_widget_show (image16);
188 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (info), image16);
189
190 g_signal_connect ((gpointer) menubar, "destroy",
191 G_CALLBACK (gtk_main_quit),
192 NULL);
193 g_signal_connect ((gpointer) new_tab, "activate",
194 G_CALLBACK (on_new_tab_activate),
195 pref);
196 g_signal_connect ((gpointer) close_tab, "activate",
197 G_CALLBACK (on_close_tab_activate),
198 pref);
199 g_signal_connect ((gpointer) close_window, "activate",
200 G_CALLBACK (gtk_main_quit),
201 NULL);
202 g_signal_connect ((gpointer) full_screen, "activate",
203 G_CALLBACK (on_full_screen_activate),
204 pref);
205 /*g_signal_connect ((gpointer) hide_menu, "activate",
206 G_CALLBACK (on_hide_menu_activate),
207 NULL);*/
208 g_signal_connect ((gpointer) info, "activate",
209 G_CALLBACK (on_info_activate),
210 NULL);
211 g_signal_connect ((gpointer) window, "key-press-event",
212 G_CALLBACK (nb_handle_key),
213 pref);
214 /* Connect to the "status-line-changed" signal. */
215 /*g_signal_connect(G_OBJECT(widget), "status-line-changed",
216 G_CALLBACK(status_line_changed), widget);*/
217
218 /* Store pointers to all widgets, for use by lookup_widget(). */
219 GLADE_HOOKUP_OBJECT_NO_REF (window, window, "window");
220 GLADE_HOOKUP_OBJECT (window, vbox, "vbox");
221 GLADE_HOOKUP_OBJECT (window, menubar, "menubar");
222 GLADE_HOOKUP_OBJECT (window, menuitem1, "menuitem1");
223 GLADE_HOOKUP_OBJECT (window, menuitem1_menu, "menuitem1_menu");
224 GLADE_HOOKUP_OBJECT (window, new_tab, "new_tab");
225 GLADE_HOOKUP_OBJECT (window, image12, "image12");
226 GLADE_HOOKUP_OBJECT (window, separatormenuitem1, "separatormenuitem1");
227 GLADE_HOOKUP_OBJECT (window, close_tab, "close_tab");
228 GLADE_HOOKUP_OBJECT (window, image13, "image13");
229 GLADE_HOOKUP_OBJECT (window, close_window, "close_window");
230 GLADE_HOOKUP_OBJECT (window, image14, "image14");
231 GLADE_HOOKUP_OBJECT (window, menuitem3, "menuitem3");
232 GLADE_HOOKUP_OBJECT (window, menuitem3_menu, "menuitem3_menu");
233 GLADE_HOOKUP_OBJECT (window, full_screen, "full_screen");
234 GLADE_HOOKUP_OBJECT (window, image15, "image15");
235 // GLADE_HOOKUP_OBJECT (window, hide_menu, "hide_menu");
236 GLADE_HOOKUP_OBJECT (window, menuitem4, "menuitem4");
237 GLADE_HOOKUP_OBJECT (window, menuitem4_menu, "menuitem4_menu");
238 GLADE_HOOKUP_OBJECT (window, info, "info");
239 GLADE_HOOKUP_OBJECT (window, image16, "image16");
240
241 notebook = gtk_notebook_new ();
242
243 GLADE_HOOKUP_OBJECT (window, notebook, "notebook");
244
245 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), pref->notebookPanel);
246 if (pref->showTabsByOneTerminal == 0)
247 {
248 gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
249 }
250 gtk_notebook_set_show_border(GTK_NOTEBOOK (notebook), FALSE);
251 gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
252 gtk_widget_show (notebook);
253 gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
254 pref->notebook = notebook;
255 GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS);
256 on_new_tab_activate((gpointer) new_tab, pref);
257
258 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
259
260
261 if(pref->stealth==TRUE)
262 {
263 gtk_widget_hide(menubar);
264 }
265
266 return window;
267 }
268
269 GtkWidget*
create_window_about(void)270 create_window_about (void)
271 {
272 GtkWidget *window_about;
273 GdkPixbuf *window_about_icon_pixbuf;
274 GtkWidget *vbox1;
275 GtkWidget *notebook1;
276 GtkWidget *label5;
277 GtkWidget *label3;
278 GtkWidget *label6;
279 GtkWidget *label4;
280 GtkWidget *window_about_close_button;
281
282 window_about = gtk_window_new (GTK_WINDOW_TOPLEVEL);
283 gtk_widget_set_name (window_about, "window_about");
284 gtk_widget_set_size_request (window_about, 350, 250);
285 gtk_window_set_title (GTK_WINDOW (window_about), _("About GTKTerm2"));
286 gtk_window_set_resizable (GTK_WINDOW (window_about), FALSE);
287 window_about_icon_pixbuf = create_pixbuf ("gtkterm2.png");
288 if (window_about_icon_pixbuf)
289 {
290 gtk_window_set_icon (GTK_WINDOW (window_about), window_about_icon_pixbuf);
291 gdk_pixbuf_unref (window_about_icon_pixbuf);
292 }
293
294 vbox1 = gtk_vbox_new (FALSE, 15);
295 gtk_widget_set_name (vbox1, "vbox1");
296 gtk_widget_show (vbox1);
297 gtk_container_add (GTK_CONTAINER (window_about), vbox1);
298 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 15);
299
300 notebook1 = gtk_notebook_new ();
301 gtk_widget_set_name (notebook1, "notebook1");
302 gtk_widget_show (notebook1);
303 gtk_box_pack_start (GTK_BOX (vbox1), notebook1, TRUE, TRUE, 0);
304
305 label5 = gtk_label_new (_("GTKTerm2 (v " VERSION ")\nCopyright (c) 2004 Oliver Feige"));
306 gtk_widget_set_name (label5, "label5");
307 gtk_widget_show (label5);
308 gtk_container_add (GTK_CONTAINER (notebook1), label5);
309 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (notebook1), label5,
310 TRUE, TRUE, GTK_PACK_START);
311 gtk_widget_set_size_request (label5, 304, 48);
312 GTK_WIDGET_SET_FLAGS (label5, GTK_CAN_FOCUS);
313 gtk_label_set_selectable (GTK_LABEL (label5), TRUE);
314
315 label3 = gtk_label_new (_("Information"));
316 gtk_widget_set_name (label3, "label3");
317 gtk_widget_show (label3);
318 gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label3);
319 gtk_label_set_justify (GTK_LABEL (label3), GTK_JUSTIFY_LEFT);
320
321 //label6 = gtk_label_new (_("Programmiert:\nOliver Feige <ofeige@gmx.de>\n\nIdee:\nOliver Feige <ofeige@gmx.de>\nStefan Bambach <sbambach@gmx.de>"));
322 label6 = gtk_label_new (_("Programmer:\nOliver Feige <ofeige@gmx.de>\n\nIdea:\nOliver Feige <ofeige@gmx.de>\nStefan Bambach <sbambach@gmx.de>"));
323 gtk_widget_set_name (label6, "label6");
324 gtk_widget_show (label6);
325 gtk_container_add (GTK_CONTAINER (notebook1), label6);
326 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (notebook1), label6,
327 TRUE, TRUE, GTK_PACK_START);
328 GTK_WIDGET_SET_FLAGS (label6, GTK_CAN_FOCUS);
329 gtk_label_set_selectable (GTK_LABEL (label6), TRUE);
330
331 label4 = gtk_label_new (_("Program of"));
332 gtk_widget_set_name (label4, "label4");
333 gtk_widget_show (label4);
334 gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label4);
335 gtk_label_set_justify (GTK_LABEL (label4), GTK_JUSTIFY_LEFT);
336
337 window_about_close_button = gtk_button_new_from_stock ("gtk-close");
338 gtk_widget_set_name (window_about_close_button, "window_about_close_button");
339 gtk_widget_show (window_about_close_button);
340 gtk_box_pack_start (GTK_BOX (vbox1), window_about_close_button, FALSE, FALSE, 0);
341 GTK_WIDGET_SET_FLAGS (window_about_close_button, GTK_CAN_DEFAULT);
342
343 g_signal_connect ((gpointer) window_about_close_button, "clicked",
344 G_CALLBACK (on_window_about_close_button_activate),
345 NULL);
346
347 /* Store pointers to all widgets, for use by lookup_widget(). */
348 GLADE_HOOKUP_OBJECT_NO_REF (window_about, window_about, "window_about");
349 GLADE_HOOKUP_OBJECT (window_about, vbox1, "vbox1");
350 GLADE_HOOKUP_OBJECT (window_about, notebook1, "notebook1");
351 GLADE_HOOKUP_OBJECT (window_about, label5, "label5");
352 GLADE_HOOKUP_OBJECT (window_about, label3, "label3");
353 GLADE_HOOKUP_OBJECT (window_about, label6, "label6");
354 GLADE_HOOKUP_OBJECT (window_about, label4, "label4");
355 GLADE_HOOKUP_OBJECT (window_about, window_about_close_button, "window_about_close_button");
356
357 return window_about;
358 }
359
create_terminal(GtkWidget * notebook,GtkWidget * window,gtkTermPref * pref)360 GtkWidget* create_terminal (GtkWidget *notebook, GtkWidget *window, gtkTermPref *pref)
361 {
362 GtkWidget *hbox, *scrollbar, *widget;
363 const char *working_directory = NULL;
364 char *args[] = {"--login", NULL};
365 char *env_add[] = {"FOO=BAR", "BOO=BIZ", NULL};
366 struct passwd *pw;
367 GString *shell;
368
369 /* Get Window from Notebook */
370 //window = lookup_widget(GTK_WIDGET(notebook), "window");
371
372 /* Create a box to hold everything. */
373 hbox = gtk_hbox_new(0, 0);
374 //gtk_container_add(GTK_CONTAINER(notebook), hbox);
375 gtk_notebook_append_page(GTK_NOTEBOOK (notebook), hbox, NULL);
376
377 /* Create the terminal widget and add it to the scrolling shell. */
378 widget = vte_terminal_new();
379 //gtk_widget_set_double_buffered(widget, dbuffer);
380 //gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
381
382 gtk_container_set_focus_child(GTK_CONTAINER(notebook), widget);
383
384 /* Connect to the "char_size_changed" signal to set geometry hints
385 * whenever the font used by the terminal is changed. */
386 // OF if (geometry) {
387 char_size_changed(widget, 0, 0, window);
388 g_signal_connect(G_OBJECT(widget), "char-size-changed",
389 G_CALLBACK(char_size_changed), window);
390 // OF }
391
392 /* Connect to the "window_title_changed" signal to set the main
393 * window's title. */
394 g_signal_connect(G_OBJECT(widget), "window-title-changed",
395 G_CALLBACK(window_title_changed), pref);
396
397 //g_signal_connect(G_OBJECT(widget), "commit",
398 // G_CALLBACK(commit), pref);
399
400 /* Connect to the "eof" signal to quit when the session ends. */
401 g_signal_connect(G_OBJECT(widget), "eof",
402 G_CALLBACK(destroy_and_quit_eof), pref);
403 g_signal_connect(G_OBJECT(widget), "child-exited",
404 G_CALLBACK(destroy_and_quit_exited), pref);
405
406 /* Connect to the "status-line-changed" signal. */
407 g_signal_connect(G_OBJECT(widget), "status-line-changed",
408 G_CALLBACK(status_line_changed), widget);
409
410 /* Connect to the "button-press" event. */
411 g_signal_connect(G_OBJECT(widget), "button-press-event",
412 G_CALLBACK(button_pressed), widget);
413
414 /* Connect to application request signals. */
415 g_signal_connect(G_OBJECT(widget), "iconify-window",
416 G_CALLBACK(iconify_window), window);
417 g_signal_connect(G_OBJECT(widget), "deiconify-window",
418 G_CALLBACK(deiconify_window), window);
419 g_signal_connect(G_OBJECT(widget), "raise-window",
420 G_CALLBACK(raise_window), window);
421 g_signal_connect(G_OBJECT(widget), "lower-window",
422 G_CALLBACK(lower_window), window);
423 g_signal_connect(G_OBJECT(widget), "maximize-window",
424 G_CALLBACK(maximize_window), window);
425 g_signal_connect(G_OBJECT(widget), "restore-window",
426 G_CALLBACK(restore_window), window);
427 g_signal_connect(G_OBJECT(widget), "refresh-window",
428 G_CALLBACK(refresh_window), window);
429 g_signal_connect(G_OBJECT(widget), "resize-window",
430 G_CALLBACK(resize_window), window);
431 g_signal_connect(G_OBJECT(widget), "move-window",
432 G_CALLBACK(move_window), window);
433 /* g_signal_connect(G_OBJECT(widget), "contents-changed",
434 G_CALLBACK(on_commit), pref);*/
435
436 /* Connect to font tweakage. */
437 g_signal_connect(G_OBJECT(widget), "increase-font-size",
438 G_CALLBACK(increase_font_size), window);
439 g_signal_connect(G_OBJECT(widget), "decrease-font-size",
440 G_CALLBACK(decrease_font_size), window);
441
442 if (pref->terminalScrollbar == 0 || pref->maxScrollbackBuffer == 0 || pref->stealth == TRUE)
443 {
444 gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
445 }
446 else
447 {
448 /* Create the scrollbar for the widget. */
449 scrollbar = gtk_vscrollbar_new((VTE_TERMINAL(widget))->adjustment);
450 if (pref->terminalScrollbar == 1)
451 {
452 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, TRUE, 0);
453 gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET(widget), TRUE, TRUE, 0);
454 }
455 else
456 {
457 gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
458 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, TRUE, 0);
459 }
460 gtk_widget_show (scrollbar);
461 }
462
463
464 /* Set some defaults. */
465 vte_terminal_set_audible_bell(VTE_TERMINAL(widget), pref->beep);
466 vte_terminal_set_cursor_blinks(VTE_TERMINAL(widget), pref->blink);
467 vte_terminal_set_scroll_on_output(VTE_TERMINAL(widget), pref->scrollOnOutput);
468 vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(widget), pref->scrollOnKeyStroke);
469 vte_terminal_set_scrollback_lines(VTE_TERMINAL(widget), pref->maxScrollbackBuffer);
470 vte_terminal_set_mouse_autohide(VTE_TERMINAL(widget), TRUE);
471 vte_terminal_set_word_chars (VTE_TERMINAL(widget), pref->worldClass);
472 vte_terminal_set_size (VTE_TERMINAL(widget), pref->termX, pref->termY);
473 // OF if (background != NULL) {
474 // OF vte_terminal_set_background_image_file(VTE_TERMINAL(widget),
475 // OF background);
476 // OF }
477 if (pref->transparent)
478 {
479 vte_terminal_set_background_transparent(VTE_TERMINAL(widget), TRUE);
480 vte_terminal_set_background_saturation(VTE_TERMINAL(widget), (double) pref->opacity);
481 }
482 // OF vte_terminal_set_background_tint_color(VTE_TERMINAL(widget), &tint);
483 vte_terminal_set_colors(VTE_TERMINAL(widget), &pref->fore[0], &pref->back[0], pref->colors, 16);
484 // OF if (terminal != NULL) {
485 // OF vte_terminal_set_emulation(VTE_TERMINAL(widget), terminal);
486 // OF }
487
488 /* Mess with our fontconfig setup. */
489 mess_with_fontconfig();
490
491 /* Set the default font. */
492 // OF if (font != NULL) {
493 vte_terminal_set_font_from_string(VTE_TERMINAL(widget), pref->terminalFont);
494 // OF }
495
496 /* Match "abcdefg". */
497 //vte_terminal_match_add(VTE_TERMINAL(widget), "abcdefg");
498 // OF if (dingus) {
499 // OF if (FALSE) {
500 // OF i = vte_terminal_match_add(VTE_TERMINAL(widget), DINGUS1);
501 // OF gumby = gdk_cursor_new(GDK_GUMBY);
502 // OF vte_terminal_match_set_cursor(VTE_TERMINAL(widget), i, gumby);
503 // OF gdk_cursor_unref(gumby);
504 // OF hand = gdk_cursor_new(GDK_HAND1);
505 // OF i = vte_terminal_match_add(VTE_TERMINAL(widget), DINGUS2);
506 // OF vte_terminal_match_set_cursor(VTE_TERMINAL(widget), i, hand);
507 // OF gdk_cursor_unref(hand);
508 // OF }
509
510 // OF if (console) {
511 // OF if (FALSE) {
512 /* Open a "console" connection. */
513 // OF int consolefd = -1, yes = 1, watch;
514 // OF GIOChannel *channel;
515 // OF consolefd = open("/dev/console", O_RDONLY | O_NOCTTY);
516 // OF if (consolefd != -1) {
517 /* Assume failure. */
518 // OF console = FALSE;
519 #ifdef TIOCCONS
520 if (ioctl(consolefd, TIOCCONS, &yes) != -1) {
521 /* Set up a listener. */
522 channel = g_io_channel_unix_new(consolefd);
523 watch = g_io_add_watch(channel,
524 G_IO_IN,
525 read_and_feed,
526 widget);
527 g_signal_connect(G_OBJECT(widget),
528 "eof",
529 G_CALLBACK(disconnect_watch),
530 GINT_TO_POINTER(watch));
531 g_signal_connect(G_OBJECT(widget),
532 "child-exited",
533 G_CALLBACK(disconnect_watch),
534 GINT_TO_POINTER(watch));
535 g_signal_connect(G_OBJECT(widget),
536 "realize",
537 G_CALLBACK(take_xconsole_ownership),
538 NULL);
539 #ifdef VTE_DEBUG
540 vte_terminal_feed(VTE_TERMINAL(widget),
541 "Console log for ...\r\n",
542 -1);
543 #endif
544 /* Record success. */
545 console = TRUE;
546 }
547 #endif
548 // OF } else {
549 /* Bail back to normal mode. */
550 // OF g_warning(_("Could not open console.\n"));
551 // OF close(consolefd);
552 // OF console = FALSE;
553 // OF }
554 // OF }
555
556
557
558 // OF if (!console) {
559 if (!FALSE)
560 {
561 if(pref->login_shell == TRUE)
562 {
563 pw = getpwuid (getuid ());
564 if (pw)
565 {
566 shell = g_string_new (pw->pw_shell);
567 }
568 else
569 {
570 shell = g_string_new ("/bin/sh");
571 }
572 vte_terminal_fork_command(VTE_TERMINAL(widget), shell->str, args, env_add, working_directory, TRUE, TRUE, TRUE);
573 }
574 else
575 {
576 vte_terminal_fork_command(VTE_TERMINAL(widget), NULL, NULL, env_add, working_directory, TRUE, TRUE, TRUE);
577 }
578 }
579
580 /* Go for it! */
581 gtk_widget_show_all(window);
582
583 return widget;
584 }
585