36818d0bb995ed4c45474f06ed74c3a5bc731b36
[geeqie.git] / src / menu.c
1 /*
2  * GQview image viewer
3  * (C)1999 John Ellis
4  *
5  * Author: John Ellis
6  *
7  */
8
9 #include "gqview.h"
10
11 #include "icons/icon_thumb.xpm"
12 #include "icons/icon_home.xpm"
13 #include "icons/icon_reload.xpm"
14 #include "icons/icon_zoom_in.xpm"
15 #include "icons/icon_zoom_out.xpm"
16 #include "icons/icon_zoom_fit.xpm"
17 #include "icons/icon_zoom_norm.xpm"
18 #include "icons/icon_config.xpm"
19 #include "icons/icon_float.xpm"
20
21 static void set_thumbnails(gint mode);
22
23 static void add_menu_item(GtkWidget *menu, gchar *label, GtkAccelGroup *accel_group,
24                                 guint accel_key, guint accel_mods, GtkSignalFunc func, gpointer data);
25
26 static void add_edit_items(GtkWidget *menu, GtkSignalFunc func, GtkAccelGroup *accel_grp);
27
28 static void add_button_to_bar(GtkWidget *hbox, gchar **pixmap_data,
29                               GtkTooltips *tooltips, gchar *tip_text,
30                               GtkSignalFunc func, gpointer data);
31
32 static void set_thumbnails(gint mode)
33 {
34         if (thumbnails_enabled == mode) return;
35         thumbnails_enabled = mode;
36         gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(thumb_menu_item), thumbnails_enabled);
37         gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thumb_button), thumbnails_enabled);
38         filelist_populate_clist();
39 }
40
41 /*
42  *-----------------------------------------------------------------------------
43  * menu and button callbacks (private)
44  *-----------------------------------------------------------------------------
45  */ 
46
47 static void exit_cb(GtkWidget *widget, gpointer data)
48 {
49         exit_gqview();
50 }
51
52 static void about_cb(GtkWidget *widget, gpointer data)
53 {
54         show_about_window();
55 }
56
57 static void create_dir_cb(GtkWidget *widget, gpointer data)
58 {
59         file_util_create_dir(current_path);
60 }
61
62 static void zoom_in_cb(GtkWidget *widget, gpointer data)
63 {
64         image_adjust_zoom(1);
65 }
66
67 static void zoom_out_cb(GtkWidget *widget, gpointer data)
68 {
69         image_adjust_zoom(-1);
70 }
71
72 static void zoom_1_1_cb(GtkWidget *widget, gpointer data)
73 {
74         image_set_zoom(1);
75 }
76
77 static void zoom_fit_cb(GtkWidget *widget, gpointer data)
78 {
79         image_set_zoom(0);
80 }
81
82 static void thumb_menu_cb(GtkWidget *widget, gpointer data)
83 {
84         set_thumbnails(GTK_CHECK_MENU_ITEM(widget)->active);
85 }
86
87 static void thumb_button_cb(GtkWidget *widget, gpointer data)
88 {
89         set_thumbnails(GTK_TOGGLE_BUTTON(widget)->active);
90 }
91
92 static void refresh_cb(GtkWidget *widget, gpointer data)
93 {
94         gchar *buf = g_strdup(current_path);
95         filelist_change_to(buf);
96         g_free(buf);
97 }
98
99 static void float_cb(GtkWidget *widget, gpointer data)
100 {
101         toolwindow_float();
102 }
103
104 static void hide_cb(GtkWidget *widget, gpointer data)
105 {
106         toolwindow_hide();
107 }
108
109 static void slideshow_cb(GtkWidget *widget, gpointer data)
110 {
111         slideshow_toggle();
112 }
113
114 static void home_dir_cb(GtkWidget *widget, gpointer data)
115 {
116         gchar *path = homedir();
117         if (path) filelist_change_to(path);
118 }
119
120 static void config_cb(GtkWidget *widget, gpointer data)
121 {
122         show_config_window();
123 }
124
125 static void remove_thumb_cb(GtkWidget *widget, gpointer data)
126 {
127         maintain_thumbnail_dir("/", TRUE);
128 }
129
130 static void full_screen_cb(GtkWidget *widget, gpointer data)
131 {
132         full_screen_toggle();
133 }
134
135
136 /*
137  *-----------------------------------------------------------------------------
138  * image menu callbacks (private)
139  *-----------------------------------------------------------------------------
140  */ 
141
142 static void copy_image_cb(GtkWidget *widget, gpointer data)
143 {
144         full_screen_stop();
145         file_util_copy(image_get_path(), NULL, current_path);
146 }
147
148 static void move_image_cb(GtkWidget *widget, gpointer data)
149 {
150         full_screen_stop();
151         file_util_move(image_get_path(), NULL, current_path);
152 }
153
154 static void rename_image_cb(GtkWidget *widget, gpointer data)
155 {
156         full_screen_stop();
157         file_util_rename(image_get_path(), NULL);
158 }
159
160 static void delete_image_cb(GtkWidget *widget, gpointer data)
161 {
162         full_screen_stop();
163         file_util_delete(image_get_path(), NULL);
164 }
165
166 /*
167  *-----------------------------------------------------------------------------
168  * file menu callbacks (private)
169  *-----------------------------------------------------------------------------
170  */ 
171
172 static void copy_file_cb(GtkWidget *widget, gpointer data)
173 {
174         file_util_copy(NULL, file_get_selected_list(), current_path);
175 }
176
177 static void move_file_cb(GtkWidget *widget, gpointer data)
178 {
179         file_util_move(NULL, file_get_selected_list(), current_path);
180 }
181
182 static void rename_file_cb(GtkWidget *widget, gpointer data)
183 {
184         file_util_rename(NULL, file_get_selected_list());
185 }
186
187 static void delete_file_cb(GtkWidget *widget, gpointer data)
188 {
189         file_util_delete(NULL, file_get_selected_list());
190 }
191
192 /*
193  *-----------------------------------------------------------------------------
194  * filelist popup menu callbacks (private)
195  *-----------------------------------------------------------------------------
196  */ 
197
198 static void popup_copy_file_cb(GtkWidget *widget, gpointer data)
199 {
200         if (file_clicked_is_selected())
201                 {
202                 file_util_copy(NULL, file_get_selected_list(), current_path);
203                 }
204         else
205                 {
206                 gchar *path = file_clicked_get_path();
207                 file_util_copy(path, NULL, current_path);
208                 g_free(path);
209                 }
210 }
211
212 static void popup_move_file_cb(GtkWidget *widget, gpointer data)
213 {
214         if (file_clicked_is_selected())
215                 {
216                 file_util_move(NULL, file_get_selected_list(), current_path);
217                 }
218         else
219                 {
220                 gchar *path = file_clicked_get_path();
221                 file_util_move(path, NULL, current_path);
222                 g_free(path);
223                 }
224 }
225
226 static void popup_rename_file_cb(GtkWidget *widget, gpointer data)
227 {
228         if (file_clicked_is_selected())
229                 {
230                 file_util_rename(NULL, file_get_selected_list());
231                 }
232         else
233                 {
234                 gchar *path = file_clicked_get_path();
235                 file_util_rename(path, NULL);
236                 g_free(path);
237                 }
238 }
239
240 static void popup_delete_file_cb(GtkWidget *widget, gpointer data)
241 {
242         if (file_clicked_is_selected())
243                 {
244                 file_util_delete(NULL, file_get_selected_list());
245                 }
246         else
247                 {
248                 gchar *path = file_clicked_get_path();
249                 file_util_delete(path, NULL);
250                 g_free(path);
251                 }
252 }
253
254 static void edit_image_cb(GtkWidget *widget, gpointer data)
255 {
256         gint n = GPOINTER_TO_INT(data);
257         start_editor_from_image(n);
258 }
259
260 static void edit_list_cb(GtkWidget *widget, gpointer data)
261 {
262         gint n = GPOINTER_TO_INT(data);
263         start_editor_from_list(n);
264 }
265
266 static void edit_full_cb(GtkWidget *widget, gpointer data)
267 {
268         gint n = GPOINTER_TO_INT(data);
269         full_screen_stop();
270         start_editor_from_image(n);
271 }
272
273 static void edit_view_cb(GtkWidget *widget, gpointer data)
274 {
275         gint n = GPOINTER_TO_INT(data);
276         view_window_active_edit(n);
277 }
278
279 static void popup_edit_list_cb(GtkWidget *widget, gpointer data)
280 {
281         gint n = GPOINTER_TO_INT(data);
282
283         if (file_clicked_is_selected())
284                 {
285                 start_editor_from_list(n);
286                 }
287         else
288                 {
289                 gchar *path;
290                 start_editor_from_file(n, path);
291                 g_free(path);
292                 }
293 }
294
295 static void new_window_file_cb(GtkWidget *widget, gpointer data)
296 {
297         gchar *path = file_clicked_get_path();
298         view_window_new(path);
299         g_free(path);
300 }
301
302 static void new_window_image_cb(GtkWidget *widget, gpointer data)
303 {
304         view_window_new(image_get_path());
305 }
306
307 static void menu_file_popup_hide_cb(GtkWidget *widget, gpointer data)
308 {
309         file_clist_highlight_unset();
310 }
311
312
313 /*
314  *-----------------------------------------------------------------------------
315  * menu addition utilities (private)
316  *-----------------------------------------------------------------------------
317  */ 
318
319 static void add_menu_item(GtkWidget *menu, gchar *label, GtkAccelGroup *accel_group,
320                                 guint accel_key, guint accel_mods, GtkSignalFunc func, gpointer data)
321 {
322         GtkWidget *item;
323
324         item = gtk_menu_item_new_with_label(label);
325         gtk_widget_add_accelerator (item, "activate", accel_group, accel_key, accel_mods, GTK_ACCEL_VISIBLE);
326         gtk_signal_connect (GTK_OBJECT (item), "activate",(GtkSignalFunc) func, data);
327         gtk_menu_append(GTK_MENU(menu), item);
328         gtk_widget_show(item);
329 }
330
331 void add_menu_popup_item(GtkWidget *menu, gchar *label,
332                          GtkSignalFunc func, gpointer data)
333 {
334         GtkWidget *item;
335
336         item = gtk_menu_item_new_with_label(label);
337         gtk_signal_connect (GTK_OBJECT (item), "activate",(GtkSignalFunc) func, data);
338         gtk_menu_append(GTK_MENU(menu), item);
339         gtk_widget_show(item);
340 }
341
342 void add_menu_divider(GtkWidget *menu)
343 {
344         GtkWidget *item = gtk_menu_item_new();
345         gtk_menu_append(GTK_MENU(menu),item);
346         gtk_widget_show(item);
347 }
348
349 /*
350  *-----------------------------------------------------------------------------
351  * edit menu routines
352  *-----------------------------------------------------------------------------
353  */ 
354
355 static void add_edit_items(GtkWidget *menu, GtkSignalFunc func, GtkAccelGroup *accel_grp)
356 {
357         gint i;
358         for (i = 0; i < 8; i++)
359                 {
360                 if (editor_command[i] && strlen(editor_command[i]) > 0)
361                         {
362                         gchar *text;
363                         if (editor_name[i] && strlen(editor_name[i]) > 0)
364                                 text = g_strdup_printf(_("in %s..."), editor_name[i]);
365                         else
366                                 text = g_strdup(_("in (unknown)..."));
367                         if (accel_grp)
368                                 add_menu_item(menu, text, accel_grp, i + 49, GDK_CONTROL_MASK, func, GINT_TO_POINTER(i));
369                         else
370                                 add_menu_popup_item(menu, text, func, GINT_TO_POINTER(i));
371                         g_free(text);
372                         }
373                 }
374 }
375
376 void update_edit_menus(GtkAccelGroup *accel_grp)
377 {
378         GtkWidget *menu;
379
380         /* main edit menu */
381
382         menu = gtk_menu_new();
383         add_edit_items(menu, edit_list_cb, accel_grp);
384         add_menu_divider(menu);
385         add_menu_item(menu, _("Options..."), accel_grp, 'O', GDK_CONTROL_MASK, config_cb, NULL);
386         add_menu_divider(menu);
387         add_menu_item(menu, _("Remove old thumbnails"), accel_grp, 'T', GDK_CONTROL_MASK, remove_thumb_cb, NULL);
388         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_edit), menu);
389
390         /* file edit popup */
391         menu = gtk_menu_new();
392         add_edit_items(menu, popup_edit_list_cb, NULL);
393         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_filelist_edit), menu);
394
395         /* image edit popup */
396         menu = gtk_menu_new();
397         add_edit_items(menu, edit_image_cb, NULL);
398         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_image_edit), menu);
399
400         /* full screen edit popup */
401         menu = gtk_menu_new();
402         add_edit_items(menu, edit_full_cb, NULL);
403         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_window_full_edit), menu);
404
405         /* view edit popup */
406         menu = gtk_menu_new();
407         add_edit_items(menu, edit_view_cb, NULL);
408         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_window_view_edit), menu);
409 }
410
411 /*
412  *-----------------------------------------------------------------------------
413  * menu bar setup routines
414  *-----------------------------------------------------------------------------
415  */ 
416
417 GtkWidget *create_menu_bar(GtkAccelGroup *accel_grp)
418 {
419         GtkWidget *bar;
420         GtkWidget *menu;
421
422         bar = gtk_menu_bar_new();
423
424         /* file menu */
425         menu_file = gtk_menu_item_new_with_label(_("File"));
426         gtk_widget_show(menu_file);
427
428         menu = gtk_menu_new();
429         add_menu_item(menu, _("Create Dir..."), accel_grp, 'N', GDK_CONTROL_MASK, create_dir_cb, NULL);
430         add_menu_divider(menu);
431         add_menu_item(menu, _("Copy..."), accel_grp, 'C', GDK_CONTROL_MASK, copy_file_cb, NULL);
432         add_menu_item(menu, _("Move..."), accel_grp, 'M', GDK_CONTROL_MASK, move_file_cb, NULL);
433         add_menu_item(menu, _("Rename..."), accel_grp, 'R', GDK_CONTROL_MASK, rename_file_cb, NULL);
434         add_menu_item(menu, _("Delete..."), accel_grp, 'D', GDK_CONTROL_MASK, delete_file_cb, NULL);
435         add_menu_divider(menu);
436         add_menu_item(menu, _("Exit"), accel_grp, 'Q', GDK_CONTROL_MASK, exit_cb, NULL);
437
438         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_file),menu);
439         gtk_menu_bar_append(GTK_MENU_BAR(bar),menu_file);
440
441         /* edit menu */
442         menu_edit = gtk_menu_item_new_with_label(_("Edit"));
443         gtk_widget_show(menu_edit);
444
445         menu = gtk_menu_new();
446
447         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_edit), menu);
448         gtk_menu_bar_append(GTK_MENU_BAR(bar), menu_edit);
449
450         /* view menu */
451         menu_view = gtk_menu_item_new_with_label(_("View"));
452         gtk_widget_show(menu_view);
453
454         menu = gtk_menu_new();
455         add_menu_item(menu, _("Zoom in"), accel_grp, '=', FALSE, zoom_in_cb, NULL);
456         add_menu_item(menu, _("Zoom out"), accel_grp, '-', FALSE, zoom_out_cb, NULL);
457         add_menu_item(menu, _("Zoom 1:1"), accel_grp, 'Z', FALSE, zoom_1_1_cb, NULL);
458         add_menu_item(menu, _("Fit image to window"), accel_grp, 'X', FALSE, zoom_fit_cb, NULL);
459         add_menu_divider(menu);
460
461         add_menu_item(menu, _("Full screen"), accel_grp, 'F', GDK_CONTROL_MASK, full_screen_cb, NULL);
462         thumb_menu_item = gtk_check_menu_item_new_with_label(_("Thumbnails"));
463         gtk_widget_add_accelerator (thumb_menu_item, "activate", accel_grp, 'T', FALSE, GTK_ACCEL_VISIBLE);
464         gtk_signal_connect (GTK_OBJECT (thumb_menu_item), "activate",(GtkSignalFunc) thumb_menu_cb, thumb_menu_item);
465         gtk_menu_append(GTK_MENU(menu), thumb_menu_item);
466         gtk_widget_show(thumb_menu_item);
467
468         add_menu_divider(menu);
469         add_menu_item(menu, _("Refresh Lists"), accel_grp, 'R', FALSE, refresh_cb, NULL);
470         add_menu_item(menu, _("(Un)Float file list"), accel_grp, 'F', FALSE, float_cb, NULL);
471         add_menu_item(menu, _("(Un)Hide file list"), accel_grp, 'H', FALSE, hide_cb, NULL);
472
473         add_menu_divider(menu);
474         add_menu_item(menu, _("Toggle slideshow"), accel_grp, 'S', FALSE, slideshow_cb, NULL);
475
476         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_view), menu);
477         gtk_menu_bar_append(GTK_MENU_BAR(bar), menu_view);
478
479         /* help menu */
480         menu_help = gtk_menu_item_new_with_label(_("Help"));
481         gtk_widget_show(menu_help);
482
483         menu = gtk_menu_new();
484         add_menu_item(menu, _("About"), accel_grp, 'A', GDK_CONTROL_MASK, about_cb, NULL);
485
486         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_help), menu);
487         gtk_menu_bar_append(GTK_MENU_BAR(bar), menu_help);
488
489         return bar;
490 }
491
492 /*
493  *-----------------------------------------------------------------------------
494  * menu file list routines (private)
495  *-----------------------------------------------------------------------------
496  */ 
497
498 static void create_menu_file_list_popup()
499 {
500         menu_file_popup = gtk_menu_new();
501         gtk_signal_connect(GTK_OBJECT(menu_file_popup), "hide", (GtkSignalFunc) menu_file_popup_hide_cb, NULL);
502
503         menu_filelist_edit = gtk_menu_item_new_with_label(_("Edit"));
504         gtk_menu_append(GTK_MENU(menu_file_popup), menu_filelist_edit);
505         gtk_widget_show(menu_filelist_edit);
506
507         add_menu_popup_item(menu_file_popup, _("View in new window"), new_window_file_cb, NULL);
508
509         add_menu_divider(menu_file_popup);
510         add_menu_popup_item(menu_file_popup, _("Copy..."), popup_copy_file_cb, NULL);
511         add_menu_popup_item(menu_file_popup, _("Move..."), popup_move_file_cb, NULL);
512         add_menu_popup_item(menu_file_popup, _("Rename..."), popup_rename_file_cb, NULL);
513         add_menu_popup_item(menu_file_popup, _("Delete..."), popup_delete_file_cb, NULL);
514         add_menu_divider(menu_file_popup);
515         add_menu_popup_item(menu_file_popup, _("Refresh"), refresh_cb, NULL);
516 }
517
518 /*
519  *-----------------------------------------------------------------------------
520  * menu image routines (private)
521  *-----------------------------------------------------------------------------
522  */ 
523
524 static void create_menu_image_popup()
525 {
526         menu_image_popup = gtk_menu_new();
527
528         add_menu_popup_item(menu_image_popup, _("Zoom in"), zoom_in_cb, NULL);
529         add_menu_popup_item(menu_image_popup, _("Zoom out"), zoom_out_cb, NULL);
530         add_menu_popup_item(menu_image_popup, _("Zoom 1:1"), zoom_1_1_cb, NULL);
531         add_menu_popup_item(menu_image_popup, _("Fit image to window"), zoom_fit_cb, NULL);
532         add_menu_divider(menu_image_popup);
533
534         menu_image_edit = gtk_menu_item_new_with_label(_("Edit"));
535         gtk_menu_append(GTK_MENU(menu_image_popup), menu_image_edit);
536         gtk_widget_show(menu_image_edit);
537
538         add_menu_popup_item(menu_image_popup, _("View in new window"), new_window_image_cb, NULL);
539
540         add_menu_divider(menu_image_popup);
541         add_menu_popup_item(menu_image_popup, _("Copy..."), copy_image_cb, NULL);
542         add_menu_popup_item(menu_image_popup, _("Move..."), move_image_cb, NULL);
543         add_menu_popup_item(menu_image_popup, _("Rename..."), rename_image_cb, NULL);
544         add_menu_popup_item(menu_image_popup, _("Delete..."), delete_image_cb, NULL);
545         add_menu_divider(menu_image_popup);
546         add_menu_popup_item(menu_image_popup, _("(Un)Hide file list"), hide_cb, NULL);
547         add_menu_popup_item(menu_image_popup, _("Full screen"), full_screen_cb, NULL);
548 }
549
550 /*
551  *-----------------------------------------------------------------------------
552  * menu full screen routines (private)
553  *-----------------------------------------------------------------------------
554  */ 
555
556 /* this re-grabs the keyboard when the menu closes, needed for override redirect */
557 static void menu_full_popup_hide_cb(GtkWidget *widget, gpointer data)
558 {
559         if (full_screen_window)
560                 {
561                 gdk_keyboard_grab(full_screen_window->window, TRUE, GDK_CURRENT_TIME);
562                 }
563 }
564
565 static void create_menu_full_screen_popup()
566 {
567         menu_window_full = gtk_menu_new();
568         add_menu_popup_item(menu_window_full, _("Zoom in"), zoom_in_cb, NULL);
569         add_menu_popup_item(menu_window_full, _("Zoom out"), zoom_out_cb, NULL);
570         add_menu_popup_item(menu_window_full, _("Zoom 1:1"), zoom_1_1_cb, NULL);
571         add_menu_popup_item(menu_window_full, _("Fit image to window"), zoom_fit_cb, NULL);
572         add_menu_divider(menu_window_full);
573
574         menu_window_full_edit = gtk_menu_item_new_with_label(_("Edit"));
575         gtk_menu_append(GTK_MENU(menu_window_full), menu_window_full_edit);
576         gtk_widget_show(menu_window_full_edit);
577
578         add_menu_divider(menu_window_full);
579         add_menu_popup_item(menu_window_full, _("Copy..."), copy_image_cb, NULL);
580         add_menu_popup_item(menu_window_full, _("Move..."), move_image_cb, NULL);
581         add_menu_popup_item(menu_window_full, _("Rename..."), rename_image_cb, NULL);
582         add_menu_popup_item(menu_window_full, _("Delete..."), delete_image_cb, NULL);
583
584         add_menu_divider(menu_window_full);
585         add_menu_popup_item(menu_window_full, _("Exit full screen"), full_screen_cb, NULL);
586
587         gtk_signal_connect(GTK_OBJECT(menu_window_full), "hide", (GtkSignalFunc) menu_full_popup_hide_cb, NULL);
588 }
589
590 void create_menu_popups()
591 {
592         create_menu_file_list_popup();
593         create_menu_image_popup();
594         create_menu_full_screen_popup();
595         create_menu_view_popup();
596 }
597
598 /*
599  *-----------------------------------------------------------------------------
600  * toolbar routines
601  *-----------------------------------------------------------------------------
602  */ 
603
604 static void add_button_to_bar(GtkWidget *hbox, gchar **pixmap_data,
605                               GtkTooltips *tooltips, gchar *tip_text,
606                               GtkSignalFunc func, gpointer data)
607 {
608         GtkWidget *button;
609         GtkStyle *style;
610         GtkWidget *pixmapwid;
611         GdkPixmap *pixmap;
612         GdkBitmap *mask;
613
614         style = gtk_widget_get_style(mainwindow);
615
616         button = gtk_button_new ();
617         gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) func, thumb_button);
618         gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
619         gtk_widget_show (button);
620         gtk_tooltips_set_tip (tooltips, button, tip_text, NULL);
621
622         pixmap = gdk_pixmap_create_from_xpm_d(mainwindow->window,  &mask,
623                  &style->bg[GTK_STATE_NORMAL], (gchar **)pixmap_data);
624         pixmapwid = gtk_pixmap_new(pixmap, mask);
625         gtk_widget_show(pixmapwid);
626         gtk_container_add(GTK_CONTAINER(button), pixmapwid);
627 }
628
629 GtkWidget *create_button_bar(GtkTooltips *tooltips)
630 {
631         GtkWidget *hbox;
632         GtkStyle *style;
633         GtkWidget *pixmapwid;
634         GdkPixmap *pixmap;
635         GdkBitmap *mask;
636
637         style = gtk_widget_get_style(mainwindow);
638         hbox = gtk_hbox_new(FALSE, 0);
639
640         thumb_button = gtk_toggle_button_new ();
641         gtk_signal_connect (GTK_OBJECT (thumb_button), "clicked",(GtkSignalFunc) thumb_button_cb, thumb_button);
642         gtk_box_pack_start (GTK_BOX (hbox), thumb_button, FALSE, FALSE, 0);
643         gtk_widget_show (thumb_button);
644         gtk_tooltips_set_tip (tooltips, thumb_button, _("Create thumbnails"), NULL);
645
646         pixmap = gdk_pixmap_create_from_xpm_d(mainwindow->window,  &mask,
647                  &style->bg[GTK_STATE_NORMAL], (gchar **)icon_thumb_xpm );
648         pixmapwid = gtk_pixmap_new(pixmap, mask);
649         gtk_widget_show(pixmapwid);
650         gtk_container_add(GTK_CONTAINER(thumb_button), pixmapwid);
651
652         add_button_to_bar(hbox, (gchar **)icon_home_xpm,
653                          tooltips, _("Change to home directory"), home_dir_cb, NULL);
654         add_button_to_bar(hbox, (gchar **)icon_reload_xpm,
655                          tooltips, _("Refresh file list"), refresh_cb, NULL);
656         add_button_to_bar(hbox, (gchar **)icon_zoom_in_xpm,
657                          tooltips, _("Zoom in"), zoom_in_cb, NULL);
658         add_button_to_bar(hbox, (gchar **)icon_zoom_out_xpm,
659                          tooltips, _("Zoom out"), zoom_out_cb, NULL);
660         add_button_to_bar(hbox, (gchar **)icon_zoom_fit_xpm,
661                          tooltips, _("Fit image to window"), zoom_fit_cb, NULL);
662         add_button_to_bar(hbox, (gchar **)icon_zoom_norm_xpm,
663                          tooltips, _("Set zoom 1:1"), zoom_1_1_cb, NULL);
664         add_button_to_bar(hbox, (gchar **)icon_config_xpm,
665                          tooltips, _("Configure options"), config_cb, NULL);
666         add_button_to_bar(hbox, (gchar **)icon_float_xpm,
667                          tooltips, _("Float Controls"), float_cb, NULL);
668
669         return hbox;
670 }
671