1 /*
2  *  menu.c:
3  *
4  *  Written by:		Ullrich Hafner
5  *
6  *  Copyright (C) 1998 Ullrich Hafner <hafner@bigfoot.de>
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
21  */
22 
23 /*
24  *  $Date: 2001/03/16 16:51:43 $
25  *  $Author: hafner $
26  *  $Revision: 1.38 $
27  *  $State: Exp $
28  */
29 
30 
31 #include "config.h"
32 
33 #include <gtk/gtk.h>
34 #include <stdio.h>
35 #if HAVE_STRING_H
36 #	include <string.h>
37 #else /* not HAVE_STRING_H */
38 #	include <strings.h>
39 #endif /* not HAVE_STRING_H */
40 
41 #include "window.h"
42 #include "icons.h"
43 #include "menu.h"
44 #include "dialog.h"
45 #include "themebrowser.h"
46 #include "error.h"
47 
48 #define HOMEPAGE "http://freshmeat.net/wmakerconf"
49 
50 /*****************************************************************************
51 
52 			    global variables
53 
54 *****************************************************************************/
55 
56 extern char       *orig_wmaker_fname;
57 extern char       *orig_rootmenu_fname;
58 extern proplist_t orig_wmaker;		/* original WindowMaker file */
59 extern proplist_t plist_changed;
60 extern proplist_t pl_yes;
61 
62 extern proplist_t   orig_rootmenu;	/* original WMRootMenu file */
63 extern GtkWidget   *log_text;
64 extern GtkTooltips *tooltips;
65 
66 /*****************************************************************************
67 
68 			    static variables
69 
70 *****************************************************************************/
71 
72 static GtkWidget *revert_menu = NULL;
73 static GtkWidget *save_menu   = NULL;
74 static GtkWidget *save_button = NULL;
75 
76 /*****************************************************************************
77 
78 				prototypes
79 
80 *****************************************************************************/
81 
82 static void
83 toggle_tooltips (GtkWidget *menuitem, gpointer data);
84 static void
85 about (GtkWidget *w, gpointer ptr);
86 static void
87 readme (GtkWidget *w, gpointer ptr);
88 static void
89 wwwpage (GtkWidget *w, gpointer ptr);
90 static void
91 revert_popup (GtkWidget *w, gpointer ptr);
92 static void
93 revert_and_exit (GtkWidget *w, gpointer ptr);
94 
95 #if defined(HAVE_POPEN) && defined(WWWUPDATE)
96 static void
97 upgrade (GtkWidget *w, gpointer ptr);
98 #endif /* HAVE_POPEN && WWWUPDATE */
99 static void
100 load_file (GtkWidget *button, gpointer data);
101 static void
102 load (GtkWidget *button, gpointer ptr);
103 
104 /*******************************************************************************
105 
106 				public code
107 
108 *******************************************************************************/
109 
110 GtkWidget *
make_menubar(GtkWidget * logwindow,bool_t show_themes_menu,bool_t noinet)111 make_menubar (GtkWidget *logwindow, bool_t show_themes_menu, bool_t noinet)
112 /*
113  *  Generate menu bar.
114  *
115  *  Return value:
116  *	menu bar widget
117  */
118 {
119    GtkWidget *file_menu   = gtk_menu_new ();
120    GtkWidget *help_menu   = gtk_menu_new ();
121    GtkWidget *themes_menu = gtk_menu_new ();
122    GtkWidget *item, *menu_bar;
123 
124    save_menu = item = gtk_menu_item_new_with_label (_("Save"));
125    gtk_menu_append (GTK_MENU (file_menu), item);
126    gtk_signal_connect_object (GTK_OBJECT (item), "activate",
127 			      GTK_SIGNAL_FUNC (save_config_file), NULL);
128    gtk_widget_set_sensitive (save_menu, FALSE);
129 
130    item = gtk_menu_item_new_with_label (_("Open..."));
131    gtk_menu_append (GTK_MENU (file_menu), item);
132    gtk_signal_connect_object (GTK_OBJECT (item), "activate",
133 			      GTK_SIGNAL_FUNC (load_file), NULL);
134 
135    if (orig_wmaker)
136    {
137       revert_menu = item = gtk_menu_item_new_with_label (_("Revert..."));
138       gtk_menu_append (GTK_MENU (file_menu), item);
139       gtk_signal_connect_object (GTK_OBJECT (item), "activate",
140 				 GTK_SIGNAL_FUNC (revert_popup), NULL);
141       gtk_widget_set_sensitive (revert_menu, FALSE);
142    }
143 
144    item = gtk_menu_item_new();
145    gtk_menu_append (GTK_MENU (file_menu), item);
146 
147 #if defined(HAVE_POPEN) && defined(WWWUPDATE)
148     if (!noinet)
149     {
150        item = gtk_menu_item_new_with_label (_("Upgrade"));
151        gtk_menu_append (GTK_MENU (file_menu), item);
152        gtk_signal_connect_object (GTK_OBJECT (item), "activate",
153 				  GTK_SIGNAL_FUNC (upgrade), NULL);
154     }
155 
156    item = gtk_menu_item_new();
157    gtk_menu_append (GTK_MENU (file_menu), item);
158 #endif /* HAVE_POPEN  && WWWUPDATE */
159 
160    item = gtk_menu_item_new_with_label (_("Exit"));
161    gtk_menu_append (GTK_MENU (file_menu), item);
162    gtk_signal_connect_object (GTK_OBJECT (item), "activate",
163 			      GTK_SIGNAL_FUNC (quit), NULL);
164 
165    item = gtk_check_menu_item_new_with_label (_("Tooltips"));
166    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
167    gtk_menu_append (GTK_MENU (help_menu), item);
168    gtk_signal_connect (GTK_OBJECT (item), "activate",
169 		       GTK_SIGNAL_FUNC (toggle_tooltips), tooltips);
170 
171    item = gtk_menu_item_new_with_label (_("About"));
172    gtk_menu_append (GTK_MENU (help_menu), item);
173    gtk_signal_connect_object (GTK_OBJECT (item), "activate",
174 			      GTK_SIGNAL_FUNC (about), NULL);
175 
176    item = gtk_menu_item_new_with_label (_("Manual"));
177    gtk_menu_append (GTK_MENU (help_menu), item);
178    gtk_signal_connect_object (GTK_OBJECT (item), "activate",
179 			      GTK_SIGNAL_FUNC (readme), NULL);
180 
181    item = gtk_menu_item_new_with_label (_("Messages"));
182    gtk_menu_append (GTK_MENU (help_menu), item);
183    gtk_signal_connect_object (GTK_OBJECT (item), "activate",
184 			      GTK_SIGNAL_FUNC (gtk_widget_show_all),
185 			      GTK_OBJECT (logwindow));
186 
187 
188    if (show_themes_menu)
189       generate_theme_menu (GTK_MENU(themes_menu));
190 
191 #if defined(NETSCAPE)
192 
193    if (show_themes_menu && !noinet)
194    {
195       item = gtk_menu_item_new();
196       gtk_menu_append (GTK_MENU (themes_menu), item);
197 
198       item = gtk_menu_item_new_with_label (_("wm.themes.org"));
199       gtk_menu_append (GTK_MENU (themes_menu), item);
200       gtk_signal_connect (GTK_OBJECT (item), "activate",
201 			  GTK_SIGNAL_FUNC (wwwpage), "http://wm.themes.org");
202 
203       item = gtk_menu_item_new_with_label (_("LonelyMachines.org"));
204       gtk_menu_append (GTK_MENU (themes_menu), item);
205       gtk_signal_connect (GTK_OBJECT (item), "activate",
206 			  GTK_SIGNAL_FUNC (wwwpage),
207 			  "http://lonelymachines.org/wm_themes.html");
208 
209       item = gtk_menu_item_new_with_label (_("unknown_lamer's themes"));
210       gtk_menu_append (GTK_MENU (themes_menu), item);
211       gtk_signal_connect (GTK_OBJECT (item), "activate",
212 			  GTK_SIGNAL_FUNC (wwwpage),
213 		"http://lamer.hackedtobits.com/linux/wmaker-themes.html");
214    }
215    if (!noinet)
216    {
217       item = gtk_menu_item_new();
218       gtk_menu_append (GTK_MENU (help_menu), item);
219 
220       item = gtk_menu_item_new_with_label (_("Homepage"));
221       gtk_menu_append (GTK_MENU (help_menu), item);
222       gtk_signal_connect (GTK_OBJECT (item), "activate",
223 			  GTK_SIGNAL_FUNC (wwwpage), HOMEPAGE);
224    }
225 #endif /* defined(NETSCAPE) */
226 
227    menu_bar  = gtk_menu_bar_new ();
228 
229    item = gtk_menu_item_new_with_label (_("File"));
230    gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), file_menu);
231    gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), item);
232 
233    if (show_themes_menu)
234    {
235       item = gtk_menu_item_new_with_label (_("Themes"));
236       gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), themes_menu);
237       gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), item);
238    }
239 
240    item = gtk_menu_item_new_with_label (_("Help"));
241    gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), help_menu);
242    gtk_menu_item_right_justify (GTK_MENU_ITEM (item));
243    gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), item);
244 
245    gtk_widget_show_all (menu_bar);
246 
247    return menu_bar;
248 }
249 
250 GtkWidget *
make_toolbar(bool_t noinet)251 make_toolbar (bool_t noinet)
252 /*
253  *  Generate toolbar.
254  *
255  *  Return value:
256  *	toolbar widget
257  */
258 {
259    GtkWidget *toolbar = gtk_toolbar_new ();
260    gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar),
261 				GTK_ORIENTATION_HORIZONTAL);
262    gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
263 
264    gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
265 			    NULL, _("Exit wmakerconf"),
266 			    "Toolbar/Exit",
267 			    gtk_pixmap_new ((p_array + P_EXIT)->pixmap,
268 					    (p_array + P_EXIT)->mask),
269 			    (GtkSignalFunc) quit, NULL);
270    save_button
271       = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
272 				 NULL, _("Save WindowMaker file"),
273 				 "Toolbar/Save",
274 				 gtk_pixmap_new ((p_array + P_DISK)->pixmap,
275 						 (p_array + P_DISK)->mask),
276 				 (GtkSignalFunc) save_config_file, NULL);
277    gtk_widget_set_sensitive (save_button, FALSE);
278 
279    gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
280    gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
281 			    NULL, _("Documentation"),
282 			    "Toolbar/Help",
283 			    gtk_pixmap_new ((p_array + P_HELP)->pixmap,
284 					    (p_array + P_HELP)->mask),
285 			    (GtkSignalFunc) readme, NULL);
286 #if defined(HAVE_POPEN) && defined(WWWUPDATE)
287     if (!noinet)
288        gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
289 				NULL,
290 				_("Upgrade wmakerconf-data package via HTTP."),
291 				"Toolbar/Install",
292 				gtk_pixmap_new ((p_array + P_INSTALL)->pixmap,
293 						(p_array + P_INSTALL)->mask),
294 				(GtkSignalFunc) upgrade, NULL);
295 #endif /* HAVE_POPEN && WWWUPDATE */
296 #if defined(NETSCAPE)
297     if (!noinet)
298        gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
299 				NULL, _("Wmakerconf homepage"),
300 				"Toolbar/WWW",
301 				gtk_pixmap_new ((p_array + P_HOME)->pixmap,
302 						(p_array + P_HOME)->mask),
303 				(GtkSignalFunc) wwwpage, HOMEPAGE);
304 #endif /* defined(NETSCAPE) */
305 
306    gtk_widget_show_all (toolbar);
307    return toolbar;
308 }
309 
310 /*******************************************************************************
311 
312 				private code
313 
314 *******************************************************************************/
315 
316 static void
about(GtkWidget * w,gpointer ptr)317 about (GtkWidget *w, gpointer ptr)
318 /*
319  *  Popup 'about' window displaying some interesting information
320  *  about the author of the package;-)
321  *
322  *  No return value.
323  */
324 {
325    static GtkWidget *window = NULL;
326 
327    if (!window)
328    {
329       GtkWidget *button;
330 
331       window = gtk_dialog_new ();
332       gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
333       gtk_window_set_title (GTK_WINDOW (window), _("About"));
334 
335       gtk_signal_connect (GTK_OBJECT (window), "delete_event",
336 			  GTK_SIGNAL_FUNC (gtk_false), NULL);
337       gtk_signal_connect (GTK_OBJECT (window), "destroy",
338 			  (GtkSignalFunc) gtk_widget_destroyed,
339 			  &window);
340 
341       button = gtk_button_new_with_label (_("Close"));
342       gtk_widget_show (button);
343       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
344 			  TRUE, TRUE, 0);
345       gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
346 				 (GtkSignalFunc) gtk_widget_destroy,
347 				 GTK_OBJECT (window));
348 
349       gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (window)->vbox), 5);
350 
351 
352       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
353 			  make_pixmap (PKGDATADIR "/wmakerconf.xpm", -1, -1,
354 				       NULL),
355 			  FALSE, FALSE, 5);
356       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
357 			  gtk_label_new ("Wmakerconf, Version " VERSION),
358 			  FALSE, FALSE, 5);
359       /*
360        *  Read version of WMWmakerconf file
361        */
362       {
363 	 FILE *version = fopen (PKGDATADIR "/wmaker-version", "r");
364 
365 	 if (version)
366 	 {
367 	    char line [MAXSTRLEN];
368 
369 	    strcpy (line, "Wmakerconf-data, Version ");
370 	    if (fgets (line + strlen (line), MAXSTRLEN - strlen (line), version))
371 	       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
372 				   gtk_label_new (line), FALSE, FALSE, 5);
373 	    fclose (version);
374 	 }
375       }
376 
377       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
378 			  gtk_label_new ("Copyright (C) 1998-2001 "
379 					 "Ullrich Hafner"),
380 			  FALSE, FALSE, 5);
381       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
382 			  gtk_label_new ("<hafner@bigfoot.de>"),
383 			  FALSE, FALSE, 5);
384       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
385 			  gtk_label_new (HOMEPAGE),
386 			  FALSE, FALSE, 5);
387    }
388    if (!GTK_WIDGET_VISIBLE (window))
389       gtk_widget_show_all (window);
390    else
391       gtk_widget_hide (window);
392 }
393 
394 static void
readme(GtkWidget * w,gpointer ptr)395 readme (GtkWidget *w, gpointer ptr)
396 /*
397  *  Popup 'readme' window displaying the README file of the distribution.
398  *
399  *  No return value.
400  */
401 {
402    static GtkWidget *window = NULL;
403 
404    if (!window)
405    {
406       GtkWidget *button;
407       FILE	*input = fopen (PKGDATADIR "/MANUAL", "r");
408 
409       if (!input)
410 	 return;
411 
412       window = gtk_dialog_new ();
413       gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
414       gtk_window_set_title (GTK_WINDOW (window), _("Manual"));
415 
416       gtk_signal_connect (GTK_OBJECT (window), "delete_event",
417 			  GTK_SIGNAL_FUNC (gtk_false), NULL);
418       gtk_signal_connect (GTK_OBJECT (window), "destroy",
419 			  (GtkSignalFunc) gtk_widget_destroyed,
420 			  &window);
421 
422       button = gtk_button_new_with_label (_("Close"));
423       gtk_widget_show (button);
424       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
425 			  TRUE, TRUE, 0);
426       gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
427 				 (GtkSignalFunc) gtk_widget_destroy,
428 				 GTK_OBJECT (window));
429 
430       {
431 	 GtkWidget     *text_view, *scrollw;
432 	 GtkTextBuffer *text_buffer;
433 	 GtkTextIter    iter;
434 	 char	        buffer [MAXSTRLEN];
435 
436 	 scrollw = gtk_scrolled_window_new (NULL, NULL);
437 	 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollw),
438 					 GTK_POLICY_AUTOMATIC,
439 				         GTK_POLICY_AUTOMATIC);
440 	 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (window)->vbox), 5);
441 	 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), scrollw,
442 			     TRUE, TRUE, 5);
443 
444 	 text_view = gtk_text_view_new ();
445 	 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
446 	 gtk_container_add (GTK_CONTAINER (scrollw), text_view);
447 	 gtk_widget_realize (text_view);
448 	 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), NO);
449 
450 	 text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
451 	 while (fgets (buffer, MAXSTRLEN, input)) {
452 	    gtk_text_buffer_get_iter_at_offset (text_buffer, &iter, -1);
453 	    gtk_text_buffer_insert (text_buffer, &iter, buffer, -1);
454 	 }
455 	 fclose (input);
456       }
457       gtk_widget_set_usize (window, 550, 500);
458    }
459    if (!GTK_WIDGET_VISIBLE (window))
460       gtk_widget_show_all (window);
461    else
462       gtk_widget_hide (window);
463 }
464 
465 static void
wwwpage(GtkWidget * w,gpointer ptr)466 wwwpage (GtkWidget *w, gpointer ptr)
467 /*
468  *  Load homepage of wmakerconf.
469  *
470  *  No return value.
471  */
472 {
473 #ifdef NETSCAPE
474    char *www = (char *) ptr;
475    char *tmp = g_strdup_printf (NETSCAPE " '%s' &", www);
476    system (tmp);
477    Free (tmp);
478 #endif
479    ;
480 }
481 
482 static void
revert_popup(GtkWidget * w,gpointer ptr)483 revert_popup (GtkWidget *w, gpointer ptr)
484 /*
485  *  Popup revert and quit dialog window.
486  *
487  *  No return value.
488  */
489 {
490    dialog (DIALOG_QUESTION, _("Cancel"), _("OK"), revert_and_exit, NULL,
491 	   _("Revert to backupfile of `WindowMaker' \n"
492 	     "and `WMRootMenu' and exit wmakerconf?"));
493 }
494 
495 static void
revert_and_exit(GtkWidget * w,gpointer ptr)496 revert_and_exit (GtkWidget *w, gpointer ptr)
497 /*
498  *  Revert old WindowMaker file and quit.
499  *
500  *  No return value.
501  */
502 {
503    if (!WMWritePropListToFile (orig_wmaker, orig_wmaker_fname))
504       warning (_("Can't revert to backupfile of `WindowMaker'. "
505 		 "Please manually revert from file WindowMaker.bak."));
506    if (orig_rootmenu && !WMWritePropListToFile (orig_rootmenu, orig_rootmenu_fname))
507       warning (_("Can't revert to backupfile of `WMRootMenu'. "
508 		 "Please manually revert from file WMRootMenu.bak."));
509    gtk_main_quit ();
510 }
511 
512 #if defined(HAVE_POPEN) && defined(WWWUPDATE)
513 static void
upgrade(GtkWidget * w,gpointer ptr)514 upgrade (GtkWidget *w, gpointer ptr)
515 /*
516  *  Upgrade wmakerconf attribute file.
517  *
518  *  No return value.
519  */
520 {
521    FILE	*pipe = popen (PERL " " PKGDATADIR "/upgrade.pl 2>&1 &", "r");
522    char	tmp [MAXSTRLEN];
523    GtkTextBuffer *buffer;
524    GtkTextIter    iter;
525 
526    gtk_widget_show_all (gtk_widget_get_toplevel (log_text));
527    while (gtk_events_pending())
528       gtk_main_iteration();
529 
530    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (log_text));
531    while (fgets (tmp, MAXSTRLEN, pipe))
532    {
533       gtk_text_buffer_get_iter_at_offset (buffer, &iter, -1);
534       gtk_text_buffer_insert (buffer, &iter, tmp, -1);
535       while (gtk_events_pending())
536 	 gtk_main_iteration();
537    }
538 
539    pclose (pipe);
540 }
541 #endif /* HAVE_POPEN && WWWUPDATE */
542 
543 void
enable_revert(void)544 enable_revert (void)
545 {
546    if (revert_menu)
547       gtk_widget_set_sensitive (revert_menu, TRUE);
548 }
549 
550 void
toggle_save(bool_t enable,proplist_t key)551 toggle_save (bool_t enable, proplist_t key)
552 {
553    gtk_widget_set_sensitive (save_menu, enable);
554    gtk_widget_set_sensitive (save_button, enable);
555    if (enable && key)
556    {
557       WMPutInPLDictionary (plist_changed, key, pl_yes);
558 
559       if (strcaseeq (WMGetFromPLString (key), "ThemePath"))
560 	 build_theme_list ();
561    }
562 }
563 
564 static void
load(GtkWidget * button,gpointer ptr)565 load (GtkWidget *button, gpointer ptr)
566 {
567    GtkFileSelection *fs       = GTK_FILE_SELECTION (ptr);
568    const char	    *filename = gtk_file_selection_get_filename (fs);
569 
570    if (!load_attributes (filename, NULL))
571       dialog_popup (DIALOG_ERROR, NULL, NULL, _("Can't open selected file."));
572 }
573 
574 static void
load_file(GtkWidget * button,gpointer data)575 load_file (GtkWidget *button, gpointer data)
576 /*
577  *  Open browser to select new file.
578  */
579 {
580    static GtkWidget *filesel = NULL;
581 
582    if (!filesel)
583    {
584       GtkFileSelection *fs;
585 
586       filesel = gtk_file_selection_new (_("Open a style, theme, or"
587 					  " WindowMaker file."));
588       fs = GTK_FILE_SELECTION (filesel);
589       gtk_file_selection_hide_fileop_buttons (fs);
590       gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_MOUSE);
591       gtk_signal_connect (GTK_OBJECT (filesel), "destroy",
592                           GTK_SIGNAL_FUNC (gtk_widget_destroyed),
593                           &filesel);
594       gtk_signal_connect (GTK_OBJECT (fs->ok_button), "clicked",
595 			  GTK_SIGNAL_FUNC (load), fs);
596 
597       gtk_signal_connect_object (GTK_OBJECT (fs->cancel_button), "clicked",
598 				 GTK_SIGNAL_FUNC (gtk_widget_destroy),
599 				 GTK_OBJECT (filesel));
600       gtk_signal_connect_object (GTK_OBJECT (fs->ok_button), "clicked",
601 				 GTK_SIGNAL_FUNC (gtk_widget_destroy),
602 				 GTK_OBJECT (filesel));
603       {
604 	 char *tmp = g_strconcat (WMAKERDIR, "/", NULL);
605 	 gtk_file_selection_set_filename (fs, tmp);
606 	 Free (tmp);
607       }
608    }
609 
610    if (!GTK_WIDGET_VISIBLE (filesel))
611       gtk_widget_show (filesel);
612    else
613       gtk_widget_destroy (filesel);
614 }
615 
616 static void
toggle_tooltips(GtkWidget * menuitem,gpointer data)617 toggle_tooltips (GtkWidget *menuitem, gpointer data)
618 {
619    if (GTK_CHECK_MENU_ITEM (menuitem)->active)
620       gtk_tooltips_enable (GTK_TOOLTIPS (data));
621    else
622       gtk_tooltips_disable (GTK_TOOLTIPS (data));
623 }
624