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