summaryrefslogtreecommitdiff
path: root/src/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/menu.c')
-rw-r--r--src/menu.c578
1 files changed, 260 insertions, 318 deletions
diff --git a/src/menu.c b/src/menu.c
index c50f015..96173a4 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1,6 +1,7 @@
/* menu.c
Copyright (C) 1999-2003 Tom Gilbert.
+Copyright (C) 2010-2024 Birte Kristina Friesel.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
@@ -24,8 +25,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "feh.h"
-#include "support.h"
#include "thumbnail.h"
+#include "wallpaper.h"
#include "winwidget.h"
#include "filelist.h"
#include "options.h"
@@ -34,7 +35,6 @@ Window menu_cover = 0;
feh_menu *menu_root = NULL;
feh_menu *menu_main = NULL;
feh_menu *menu_single_win = NULL;
-feh_menu *menu_about_win = NULL;
feh_menu *menu_thumbnail_viewer = NULL;
feh_menu *menu_thumbnail_win = NULL;
feh_menu *menu_bg = NULL;
@@ -45,18 +45,45 @@ static feh_menu *feh_menu_func_gen_info(feh_menu * m);
static void feh_menu_func_free_info(feh_menu * m);
static void feh_menu_func_free_options(feh_menu * m);
static feh_menu *feh_menu_func_gen_options(feh_menu * m);
-void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data);
+void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, unsigned short data);
void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i);
enum {
- CB_ABOUT = 1, CB_CLOSE, CB_EXIT, CB_RELOAD, CB_REMOVE, CB_DELETE, CB_RESET,
- CB_REMOVE_THUMB, CB_DELETE_THUMB, CB_BG_TILED, CB_BG_SCALED,
- CB_BG_CENTERED, CB_BG_FILLED, CB_BG_TILED_NOFILE,
- CB_BG_SCALED_NOFILE, CB_BG_CENTERED_NOFILE, CB_BG_FILLED_NOFILE,
- CB_SORT_FILENAME, CB_SORT_IMAGENAME, CB_SORT_FILESIZE, CB_SORT_RANDOMIZE,
- CB_SAVE_IMAGE, CB_SAVE_FILELIST, CB_FIT, CB_OPT_DRAW_FILENAME,
- CB_OPT_DRAW_ACTIONS, CB_OPT_KEEP_HTTP, CB_OPT_FREEZE_WINDOW,
- CB_OPT_FULLSCREEN, CB_EDIT_ROTATE, CB_OPT_AUTO_ZOOM
+ CB_CLOSE = 1,
+ CB_EXIT,
+ CB_RELOAD,
+ CB_REMOVE,
+ CB_DELETE,
+ CB_RESET,
+ CB_REMOVE_THUMB,
+ CB_DELETE_THUMB,
+ CB_BG_TILED,
+ CB_BG_SCALED,
+ CB_BG_CENTERED,
+ CB_BG_FILLED,
+ CB_BG_TILED_NOFILE,
+ CB_BG_SCALED_NOFILE,
+ CB_BG_CENTERED_NOFILE,
+ CB_BG_FILLED_NOFILE,
+ CB_SORT_FILENAME,
+ CB_SORT_IMAGENAME,
+ CB_SORT_DIRNAME,
+ CB_SORT_MTIME,
+ CB_SORT_FILESIZE,
+ CB_SORT_RANDOMIZE,
+ CB_SAVE_IMAGE,
+ CB_SAVE_FILELIST,
+ CB_FIT,
+ CB_OPT_DRAW_FILENAME,
+ CB_OPT_DRAW_ACTIONS,
+ CB_OPT_KEEP_HTTP,
+ CB_OPT_FREEZE_WINDOW,
+ CB_OPT_FULLSCREEN,
+ CB_EDIT_ROTATE,
+ CB_EDIT_MIRROR,
+ CB_EDIT_FLIP,
+ CB_OPT_AUTO_ZOOM,
+ CB_OPT_KEEP_ZOOM_VP
};
feh_menu *feh_menu_new(void)
@@ -99,7 +126,7 @@ feh_menu *feh_menu_new(void)
m->updates = NULL;
m->needs_redraw = 1;
m->func_free = NULL;
- m->data = NULL;
+ m->data = 0;
m->calc = 0;
m->bg = NULL;
@@ -109,7 +136,7 @@ feh_menu *feh_menu_new(void)
menus = l;
if (!bg) {
- feh_load_image_char(&bg, opt.menu_bg);
+ feh_load_image_char(&bg, PREFIX "/share/feh/images/menubg_default.png");
if (bg) {
border.left = border.right = border.top = border.bottom
= 4;
@@ -141,8 +168,6 @@ void feh_menu_free(feh_menu * m)
ii = i;
i = i->next;
- if (ii->func_free)
- (ii->func_free) (ii->data);
if (ii->text)
free(ii->text);
if (ii->submenu)
@@ -241,7 +266,6 @@ void feh_menu_select_prev(feh_menu * selected_menu, feh_menu_item * selected_ite
while (1) {
i = i->prev;
if (!i) {
- i = selected_menu->items;
for (ii = selected_menu->items; ii->next; ii = ii->next);
i = ii;
}
@@ -439,14 +463,12 @@ void feh_menu_show_at_submenu(feh_menu * m, feh_menu * parent_m, feh_menu_item *
void feh_menu_move(feh_menu * m, int x, int y)
{
- int dx, dy;
-
if (!m)
return;
- dx = x - m->x;
- dy = y - m->y;
+
if (m->visible)
XMoveWindow(disp, m->win, x, y);
+
m->x = x;
m->y = y;
return;
@@ -515,26 +537,25 @@ void feh_menu_show(feh_menu * m)
}
feh_menu_item *feh_menu_add_toggle_entry(feh_menu * m, char *text,
- Imlib_Image icon, char *submenu, int action,
- void *data, void (*func_free) (void *data), int setting)
+ char *submenu, int action,
+ unsigned short data, void (*func_free) (void *data), int setting)
{
feh_menu_item *mi;
- mi = feh_menu_add_entry(m, text, icon, submenu, action, data, func_free);
+ mi = feh_menu_add_entry(m, text, submenu, action, data, func_free);
mi->is_toggle = TRUE;
MENU_ITEM_TOGGLE_SET(mi, setting);
return(mi);
}
-feh_menu_item *feh_menu_add_entry(feh_menu * m, char *text, Imlib_Image icon,
- char *submenu, int action, void *data, void (*func_free) (void *data))
+feh_menu_item *feh_menu_add_entry(feh_menu * m, char *text, char *submenu,
+ int action, unsigned short data, void (*func_free) (void *data))
{
feh_menu_item *mi, *ptr;
mi = (feh_menu_item *) emalloc(sizeof(feh_menu_item));
mi->state = MENU_ITEM_STATE_NORMAL;
- mi->icon = icon;
mi->is_toggle = FALSE;
if (text)
mi->text = estrdup(text);
@@ -566,12 +587,12 @@ feh_menu_item *feh_menu_add_entry(feh_menu * m, char *text, Imlib_Image icon,
return(mi);
}
-void feh_menu_entry_get_size(feh_menu * m, feh_menu_item * i, int *w, int *h)
+void feh_menu_entry_get_size(feh_menu_item * i, int *w, int *h)
{
int tw, th;
if (i->text) {
- gib_imlib_get_text_size(opt.menu_fn, i->text, opt.menu_style_l, &tw, &th, IMLIB_TEXT_TO_RIGHT);
+ gib_imlib_get_text_size(opt.menu_fn, i->text, NULL, &tw, &th, IMLIB_TEXT_TO_RIGHT);
*w = tw + FEH_MENUITEM_PAD_LEFT + FEH_MENUITEM_PAD_RIGHT;
*h = th + FEH_MENUITEM_PAD_TOP + FEH_MENUITEM_PAD_BOTTOM;
} else {
@@ -580,15 +601,14 @@ void feh_menu_entry_get_size(feh_menu * m, feh_menu_item * i, int *w, int *h)
}
return;
- m = NULL;
}
void feh_menu_calc_size(feh_menu * m)
{
int prev_w, prev_h;
feh_menu_item *i;
- int j = 0, count = 0, max_w = 0, max_h = 0, icon_w = 0, next_w = 0;
- int toggle_w = 0;
+ int j = 0, count = 0, max_w = 0, max_h = 0, next_w = 0;
+ int toggle_w = 1;
prev_w = m->w;
prev_h = m->h;
@@ -597,7 +617,7 @@ void feh_menu_calc_size(feh_menu * m)
for (i = m->items; i; i = i->next) {
int w, h;
- feh_menu_entry_get_size(m, i, &w, &h);
+ feh_menu_entry_get_size(i, &w, &h);
if (w > max_w)
max_w = w;
if (h > max_h)
@@ -615,35 +635,12 @@ void feh_menu_calc_size(feh_menu * m)
count++;
}
- for (i = m->items; i; i = i->next) {
- if (i->icon) {
- Imlib_Image im;
-
- im = i->icon;
- if (im) {
- int iw, ih, ow, oh;
-
- iw = gib_imlib_image_get_width(im);
- ih = gib_imlib_image_get_height(im);
- if (ih <= max_h) {
- ow = iw;
- oh = ih;
- } else {
- ow = (iw * max_h) / ih;
- oh = max_h;
- }
- if (ow > icon_w)
- icon_w = ow;
- }
- }
- }
m->h = FEH_MENU_PAD_TOP;
for (i = m->items; i; i = i->next) {
i->x = FEH_MENU_PAD_LEFT;
i->y = m->h;
- i->w = max_w + icon_w + toggle_w + next_w;
- i->icon_x = FEH_MENUITEM_PAD_LEFT;
- i->toggle_x = i->icon_x + icon_w;
+ i->w = max_w + toggle_w + next_w;
+ i->toggle_x = 1;
i->text_x = i->toggle_x + toggle_w;
i->sub_x = i->text_x + max_w;
if (i->text)
@@ -654,7 +651,7 @@ void feh_menu_calc_size(feh_menu * m)
j++;
}
m->h += FEH_MENU_PAD_BOTTOM;
- m->w = next_w + toggle_w + icon_w + max_w + FEH_MENU_PAD_LEFT + FEH_MENU_PAD_RIGHT;
+ m->w = next_w + toggle_w + max_w + FEH_MENU_PAD_LEFT + FEH_MENU_PAD_RIGHT;
if ((prev_w != m->w) || (prev_h != m->h)) {
if (m->pmap)
@@ -704,42 +701,9 @@ void feh_menu_draw_item(feh_menu_item * i, Imlib_Image im, int ox, int oy)
}
/* draw text */
- gib_imlib_text_draw(im, opt.menu_fn, opt.menu_style_l,
+ gib_imlib_text_draw(im, opt.menu_fn, NULL,
i->x - ox + i->text_x, i->y - oy + FEH_MENUITEM_PAD_TOP,
i->text, IMLIB_TEXT_TO_RIGHT, 0, 0, 0, 255);
- if (i->icon) {
- Imlib_Image im2;
-
- D(("icon item\n"));
-
- im2 = i->icon;
- if (im2) {
- int iw, ih, ow, oh;
-
- iw = gib_imlib_image_get_width(im2);
- ih = gib_imlib_image_get_height(im2);
- if (ih <= (i->h - FEH_MENUITEM_PAD_TOP - FEH_MENUITEM_PAD_BOTTOM)) {
- ow = iw;
- oh = ih;
- } else {
- ow = (iw * (i->h - FEH_MENUITEM_PAD_TOP - FEH_MENUITEM_PAD_BOTTOM)) / ih;
- oh = i->h - FEH_MENUITEM_PAD_TOP - FEH_MENUITEM_PAD_BOTTOM;
- }
- gib_imlib_blend_image_onto_image(im, im2,
- 0, 0, 0,
- iw, ih,
- i->x +
- i->icon_x -
- ox,
- i->y +
- FEH_MENUITEM_PAD_TOP
- +
- (((i->h -
- FEH_MENUITEM_PAD_TOP - FEH_MENUITEM_PAD_BOTTOM)
- - oh) / 2) - oy, ow, oh, 1, 1, 1);
- gib_imlib_free_image(im2);
- }
- }
if (i->submenu) {
D(("submenu item\n"));
feh_menu_draw_submenu_at(i->x + i->sub_x,
@@ -861,27 +825,16 @@ void feh_menu_draw_toggle_at(int x, int y, int w, int h, Imlib_Image dst, int ox
void feh_menu_draw_submenu_at(int x, int y, Imlib_Image dst, int ox, int oy)
{
- ImlibPolygon poly;
-
- x -= ox;
+ // Draw filled triangle
+ x -= ox;
y -= oy;
imlib_context_set_image(dst);
- poly = imlib_polygon_new();
- imlib_polygon_add_point(poly, x + 2, y + 5);
- imlib_polygon_add_point(poly, x + 5, y + 7);
- imlib_polygon_add_point(poly, x + 2, y + 11);
- imlib_context_set_color(0, 0, 0, 60);
- imlib_image_fill_polygon(poly);
- imlib_polygon_free(poly);
-
- poly = imlib_polygon_new();
- imlib_polygon_add_point(poly, x, y + 3);
- imlib_polygon_add_point(poly, x + 3, y + 6);
- imlib_polygon_add_point(poly, x, y + 9);
imlib_context_set_color(0, 0, 0, 255);
- imlib_image_fill_polygon(poly);
- imlib_polygon_free(poly);
+
+ for (int i= 0; i <= 3; i++) {
+ imlib_image_draw_line(x+i, y+3+i, x+i, y+9-i, 0);
+ }
return;
}
@@ -896,7 +849,7 @@ void feh_menu_item_draw_at(int x, int y, int w, int h, Imlib_Image dst, int ox,
{
imlib_context_set_image(dst);
if (selected)
- gib_imlib_image_fill_rectangle(dst, x - ox, y - oy, w, h, 255, 255, 255, 178);
+ gib_imlib_image_fill_rectangle(dst, x - ox, y - oy, w, h, 127, 127, 127, 178);
return;
}
@@ -944,39 +897,42 @@ void feh_menu_init_main(void)
menu_main = feh_menu_new();
menu_main->name = estrdup("MAIN");
- feh_menu_add_entry(menu_main, "File", NULL, "FILE", 0, NULL, NULL);
+ feh_menu_add_entry(menu_main, "File", "FILE", 0, 0, NULL);
if (opt.slideshow || opt.multiwindow) {
- feh_menu_add_entry(menu_main, "Sort List", NULL, "SORT", 0, NULL, NULL);
- mi = feh_menu_add_entry(menu_main, "Image Info", NULL, "INFO", 0, NULL, NULL);
+ feh_menu_add_entry(menu_main, "Sort List", "SORT", 0, 0, NULL);
+ mi = feh_menu_add_entry(menu_main, "Image Info", "INFO", 0, 0, NULL);
mi->func_gen_sub = feh_menu_func_gen_info;
- feh_menu_add_entry(menu_main, NULL, NULL, NULL, 0, NULL, NULL);
+ feh_menu_add_entry(menu_main, NULL, NULL, 0, 0, NULL);
}
- mi = feh_menu_add_entry(menu_main, "Options", NULL, "OPTIONS", 0, NULL, NULL);
+ mi = feh_menu_add_entry(menu_main, "Options", "OPTIONS", 0, 0, NULL);
mi->func_gen_sub = feh_menu_func_gen_options;
- if (!opt.full_screen)
- feh_menu_add_entry(menu_main, "About " PACKAGE, NULL, NULL, CB_ABOUT, NULL, NULL);
if (opt.multiwindow)
- feh_menu_add_entry(menu_main, "Close", NULL, NULL, CB_CLOSE, NULL, NULL);
- feh_menu_add_entry(menu_main, "Exit", NULL, NULL, CB_EXIT, NULL, NULL);
+ feh_menu_add_entry(menu_main, "Close", NULL, CB_CLOSE, 0, NULL);
+ feh_menu_add_entry(menu_main, "Exit", NULL, CB_EXIT, 0, NULL);
m = feh_menu_new();
m->name = estrdup("FILE");
- feh_menu_add_entry(m, "Reset", NULL, NULL, CB_RESET, NULL, NULL);
- feh_menu_add_entry(m, "Resize Window", NULL, NULL, CB_FIT, NULL, NULL);
- feh_menu_add_entry(m, "Reload", NULL, NULL, CB_RELOAD, NULL, NULL);
- feh_menu_add_entry(m, "Save Image", NULL, NULL, CB_SAVE_IMAGE, NULL, NULL);
- feh_menu_add_entry(m, "Save List", NULL, NULL, CB_SAVE_FILELIST, NULL, NULL);
- feh_menu_add_entry(m, "Edit in Place", NULL, "EDIT", 0, NULL, NULL);
- feh_menu_add_entry(m, "Background", NULL, "BACKGROUND", 0, NULL, NULL);
- feh_menu_add_entry(m, NULL, NULL, NULL, 0, NULL, NULL);
- feh_menu_add_entry(m, "Hide", NULL, NULL, CB_REMOVE, NULL, NULL);
- feh_menu_add_entry(m, "Delete", NULL, "CONFIRM", 0, NULL, NULL);
+ feh_menu_add_entry(m, "Reset", NULL, CB_RESET, 0, NULL);
+ feh_menu_add_entry(m, "Resize Window", NULL, CB_FIT, 0, NULL);
+ feh_menu_add_entry(m, "Reload", NULL, CB_RELOAD, 0, NULL);
+ feh_menu_add_entry(m, "Save Image", NULL, CB_SAVE_IMAGE, 0, NULL);
+ feh_menu_add_entry(m, "Save List", NULL, CB_SAVE_FILELIST, 0, NULL);
+ if (opt.edit) {
+ feh_menu_add_entry(m, "Edit in Place", "EDIT", 0, 0, NULL);
+ }
+ else {
+ feh_menu_add_entry(m, "Change View", "EDIT", 0, 0, NULL);
+ }
+ feh_menu_add_entry(m, "Background", "BACKGROUND", 0, 0, NULL);
+ feh_menu_add_entry(m, NULL, NULL, 0, 0, NULL);
+ feh_menu_add_entry(m, "Hide", NULL, CB_REMOVE, 0, NULL);
+ feh_menu_add_entry(m, "Delete", "CONFIRM", 0, 0, NULL);
return;
}
-void feh_menu_init_common()
+void feh_menu_init_common(void)
{
int num_desks, i;
char buf[30];
@@ -986,57 +942,53 @@ void feh_menu_init_common()
opt.menu_fn = gib_imlib_load_font(opt.menu_font);
if (!opt.menu_fn)
eprintf
- ("couldn't load menu font %s, did you make install?\nAre you specifying a nonexistant font?\nDid you tell feh where to find it with --fontpath?",
+ ("couldn't load menu font %s, did you make install?\nAre you specifying a nonexistent font?\nDid you tell feh where to find it with --fontpath?",
opt.menu_font);
}
- if (!opt.menu_style_l) {
- opt.menu_style_l = gib_style_new_from_ascii(opt.menu_style);
- if (!opt.menu_style_l) {
- weprintf
- ("couldn't load style file for menu fonts, (%s).\nDid you make install? Menus will look boring without the style file.",
- opt.menu_style);
- }
- }
m = feh_menu_new();
m->name = estrdup("SORT");
- feh_menu_add_entry(m, "By File Name", NULL, NULL, CB_SORT_FILENAME, NULL, NULL);
- feh_menu_add_entry(m, "By Image Name", NULL, NULL, CB_SORT_IMAGENAME, NULL, NULL);
- if (opt.preload || (opt.sort > SORT_FILENAME))
- feh_menu_add_entry(m, "By File Size", NULL, NULL, CB_SORT_FILESIZE, NULL, NULL);
- feh_menu_add_entry(m, "Randomize", NULL, NULL, CB_SORT_RANDOMIZE, NULL, NULL);
+ feh_menu_add_entry(m, "By File Name", NULL, CB_SORT_FILENAME, 0, NULL);
+ feh_menu_add_entry(m, "By Image Name", NULL, CB_SORT_IMAGENAME, 0, NULL);
+ feh_menu_add_entry(m, "By Directory Name", NULL, CB_SORT_DIRNAME, 0, NULL);
+ feh_menu_add_entry(m, "By Modification Date", NULL, CB_SORT_MTIME, 0, NULL);
+ if (opt.preload || (opt.sort > SORT_MTIME))
+ feh_menu_add_entry(m, "By File Size", NULL, CB_SORT_FILESIZE, 0, NULL);
+ feh_menu_add_entry(m, "Randomize", NULL, CB_SORT_RANDOMIZE, 0, NULL);
m = feh_menu_new();
m->name = estrdup("CONFIRM");
- feh_menu_add_entry(m, "Confirm", NULL, NULL, CB_DELETE, NULL, NULL);
+ feh_menu_add_entry(m, "Confirm", NULL, CB_DELETE, 0, NULL);
m = feh_menu_new();
m->name = estrdup("EDIT");
- feh_menu_add_entry(m, "Rotate 90 CW", NULL, NULL, CB_EDIT_ROTATE, (void *) 1, NULL);
- feh_menu_add_entry(m, "Rotate 180", NULL, NULL, CB_EDIT_ROTATE, (void *) 2, NULL);
- feh_menu_add_entry(m, "Rotate 90 CCW", NULL, NULL, CB_EDIT_ROTATE, (void *) 3, NULL);
+ feh_menu_add_entry(m, "Rotate 90 CW", NULL, CB_EDIT_ROTATE, 1, NULL);
+ feh_menu_add_entry(m, "Rotate 180", NULL, CB_EDIT_ROTATE, 2, NULL);
+ feh_menu_add_entry(m, "Rotate 90 CCW", NULL, CB_EDIT_ROTATE, 3, NULL);
+ feh_menu_add_entry(m, "Mirror", NULL, CB_EDIT_MIRROR, 0, NULL);
+ feh_menu_add_entry(m, "Flip", NULL, CB_EDIT_FLIP, 0, NULL);
menu_bg = feh_menu_new();
menu_bg->name = estrdup("BACKGROUND");
num_desks = feh_wm_get_num_desks();
if (num_desks > 1) {
- feh_menu_add_entry(menu_bg, "Set Tiled", NULL, "TILED", 0, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Scaled", NULL, "SCALED", 0, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Centered", NULL, "CENTERED", 0, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Filled", NULL, "FILLED", 0, NULL, NULL);
+ feh_menu_add_entry(menu_bg, "Set Tiled", "TILED", 0, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Scaled", "SCALED", 0, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Centered", "CENTERED", 0, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Filled", "FILLED", 0, 0, NULL);
m = feh_menu_new();
m->name = estrdup("TILED");
for (i = 0; i < num_desks; i++) {
snprintf(buf, sizeof(buf), "Desktop %d", i + 1);
if (opt.slideshow || opt.multiwindow)
- feh_menu_add_entry(m, buf, NULL, NULL, CB_BG_TILED,
- (void *) i, NULL);
+ feh_menu_add_entry(m, buf, NULL, CB_BG_TILED,
+ i, NULL);
else
- feh_menu_add_entry(m, buf, NULL, NULL, CB_BG_TILED_NOFILE,
- (void *) i, NULL);
+ feh_menu_add_entry(m, buf, NULL, CB_BG_TILED_NOFILE,
+ i, NULL);
}
m = feh_menu_new();
@@ -1045,11 +997,11 @@ void feh_menu_init_common()
snprintf(buf, sizeof(buf), "Desktop %d", i + 1);
if (opt.slideshow || opt.multiwindow)
- feh_menu_add_entry(m, buf, NULL, NULL, CB_BG_SCALED,
- (void *) i, NULL);
+ feh_menu_add_entry(m, buf, NULL, CB_BG_SCALED,
+ i, NULL);
else
- feh_menu_add_entry(m, buf, NULL, NULL, CB_BG_SCALED_NOFILE,
- (void *) i, NULL);
+ feh_menu_add_entry(m, buf, NULL, CB_BG_SCALED_NOFILE,
+ i, NULL);
}
m = feh_menu_new();
@@ -1057,11 +1009,11 @@ void feh_menu_init_common()
for (i = 0; i < num_desks; i++) {
snprintf(buf, sizeof(buf), "Desktop %d", i + 1);
if (opt.slideshow || opt.multiwindow)
- feh_menu_add_entry(m, buf, NULL, NULL,
- CB_BG_CENTERED, (void *) i, NULL);
+ feh_menu_add_entry(m, buf, NULL,
+ CB_BG_CENTERED, i, NULL);
else
- feh_menu_add_entry(m, buf, NULL, NULL,
- CB_BG_CENTERED_NOFILE, (void *) i, NULL);
+ feh_menu_add_entry(m, buf, NULL,
+ CB_BG_CENTERED_NOFILE, i, NULL);
}
m = feh_menu_new();
@@ -1069,33 +1021,33 @@ void feh_menu_init_common()
for (i = 0; i < num_desks; i++) {
snprintf(buf, sizeof(buf), "Desktop %d", i + 1);
if (opt.slideshow || opt.multiwindow)
- feh_menu_add_entry(m, buf, NULL, NULL,
+ feh_menu_add_entry(m, buf, NULL,
CB_BG_FILLED,
- (void *) i, NULL);
+ i, NULL);
else
- feh_menu_add_entry(m, buf, NULL, NULL,
+ feh_menu_add_entry(m, buf, NULL,
CB_BG_FILLED_NOFILE,
- (void *) i, NULL);
+ i, NULL);
}
} else {
if (opt.slideshow || opt.multiwindow) {
- feh_menu_add_entry(menu_bg, "Set Tiled", NULL,
- NULL, CB_BG_TILED, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Scaled", NULL,
- NULL, CB_BG_SCALED, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Centered", NULL,
- NULL, CB_BG_CENTERED, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Filled", NULL,
- NULL, CB_BG_FILLED, NULL, NULL);
+ feh_menu_add_entry(menu_bg, "Set Tiled",
+ NULL, CB_BG_TILED, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Scaled",
+ NULL, CB_BG_SCALED, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Centered",
+ NULL, CB_BG_CENTERED, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Filled",
+ NULL, CB_BG_FILLED, 0, NULL);
} else {
- feh_menu_add_entry(menu_bg, "Set Tiled", NULL,
- NULL, CB_BG_TILED_NOFILE, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Scaled", NULL,
- NULL, CB_BG_SCALED_NOFILE, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Centered", NULL,
- NULL, CB_BG_CENTERED_NOFILE, NULL, NULL);
- feh_menu_add_entry(menu_bg, "Set Filled", NULL,
- NULL, CB_BG_FILLED_NOFILE, NULL, NULL);
+ feh_menu_add_entry(menu_bg, "Set Tiled",
+ NULL, CB_BG_TILED_NOFILE, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Scaled",
+ NULL, CB_BG_SCALED_NOFILE, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Centered",
+ NULL, CB_BG_CENTERED_NOFILE, 0, NULL);
+ feh_menu_add_entry(menu_bg, "Set Filled",
+ NULL, CB_BG_FILLED_NOFILE, 0, NULL);
}
}
common_menus = 1;
@@ -1103,17 +1055,6 @@ void feh_menu_init_common()
return;
}
-void feh_menu_init_about_win(void)
-{
- menu_about_win = feh_menu_new();
- menu_about_win->name = estrdup("ABOUTWIN");
-
- feh_menu_add_entry(menu_about_win, "Close", NULL, NULL, CB_CLOSE, NULL, NULL);
- feh_menu_add_entry(menu_about_win, "Exit", NULL, NULL, CB_EXIT, NULL, NULL);
-
- return;
-}
-
void feh_menu_init_single_win(void)
{
feh_menu *m;
@@ -1125,31 +1066,29 @@ void feh_menu_init_single_win(void)
menu_single_win = feh_menu_new();
menu_single_win->name = estrdup("SINGLEWIN");
- feh_menu_add_entry(menu_single_win, "File", NULL, "SINGLEWIN_FILE", 0, NULL, NULL);
+ feh_menu_add_entry(menu_single_win, "File", "SINGLEWIN_FILE", 0, 0, NULL);
m = feh_menu_new();
m->name = estrdup("SINGLEWIN_FILE");
- feh_menu_add_entry(m, "Reset", NULL, NULL, CB_RESET, NULL, NULL);
- feh_menu_add_entry(m, "Resize Window", NULL, NULL, CB_FIT, NULL, NULL);
- feh_menu_add_entry(m, "Reload", NULL, NULL, CB_RELOAD, NULL, NULL);
- feh_menu_add_entry(m, "Save Image", NULL, NULL, CB_SAVE_IMAGE, NULL, NULL);
- feh_menu_add_entry(m, "Save List", NULL, NULL, CB_SAVE_FILELIST, NULL, NULL);
- feh_menu_add_entry(m, "Edit in Place", NULL, "EDIT", 0, NULL, NULL);
- feh_menu_add_entry(m, "Background", NULL, "BACKGROUND", 0, NULL, NULL);
+ feh_menu_add_entry(m, "Reset", NULL, CB_RESET, 0, NULL);
+ feh_menu_add_entry(m, "Resize Window", NULL, CB_FIT, 0, NULL);
+ feh_menu_add_entry(m, "Reload", NULL, CB_RELOAD, 0, NULL);
+ feh_menu_add_entry(m, "Save Image", NULL, CB_SAVE_IMAGE, 0, NULL);
+ feh_menu_add_entry(m, "Save List", NULL, CB_SAVE_FILELIST, 0, NULL);
+ feh_menu_add_entry(m, "Edit in Place", "EDIT", 0, 0, NULL);
+ feh_menu_add_entry(m, "Background", "BACKGROUND", 0, 0, NULL);
if (opt.multiwindow || opt.slideshow) {
- feh_menu_add_entry(m, NULL, NULL, NULL, 0, NULL, NULL);
- feh_menu_add_entry(m, "Hide", NULL, NULL, CB_REMOVE, NULL, NULL);
- feh_menu_add_entry(m, "Delete", NULL, "CONFIRM", 0, NULL, NULL);
+ feh_menu_add_entry(m, NULL, NULL, 0, 0, NULL);
+ feh_menu_add_entry(m, "Hide", NULL, CB_REMOVE, 0, NULL);
+ feh_menu_add_entry(m, "Delete", "CONFIRM", 0, 0, NULL);
}
- mi = feh_menu_add_entry(menu_single_win, "Image Info", NULL, "INFO", 0, NULL, NULL);
+ mi = feh_menu_add_entry(menu_single_win, "Image Info", "INFO", 0, 0, NULL);
mi->func_gen_sub = feh_menu_func_gen_info;
- feh_menu_add_entry(menu_single_win, NULL, NULL, NULL, 0, NULL, NULL);
- mi = feh_menu_add_entry(menu_single_win, "Options", NULL, "OPTIONS", 0, NULL, NULL);
+ feh_menu_add_entry(menu_single_win, NULL, NULL, 0, 0, NULL);
+ mi = feh_menu_add_entry(menu_single_win, "Options", "OPTIONS", 0, 0, NULL);
mi->func_gen_sub = feh_menu_func_gen_options;
- feh_menu_add_entry(menu_single_win, "About " PACKAGE, NULL, NULL,
- CB_ABOUT, NULL, NULL);
- feh_menu_add_entry(menu_single_win, "Close", NULL, NULL, CB_CLOSE, NULL, NULL);
- feh_menu_add_entry(menu_single_win, "Exit", NULL, NULL, CB_EXIT, NULL, NULL);
+ feh_menu_add_entry(menu_single_win, "Close", NULL, CB_CLOSE, 0, NULL);
+ feh_menu_add_entry(menu_single_win, "Exit", NULL, CB_EXIT, 0, NULL);
return;
}
@@ -1165,21 +1104,19 @@ void feh_menu_init_thumbnail_win(void)
menu_thumbnail_win = feh_menu_new();
menu_thumbnail_win->name = estrdup("THUMBWIN");
- feh_menu_add_entry(menu_thumbnail_win, "File", NULL, "THUMBWIN_FILE", 0, NULL, NULL);
+ feh_menu_add_entry(menu_thumbnail_win, "File", "THUMBWIN_FILE", 0, 0, NULL);
m = feh_menu_new();
m->name = estrdup("THUMBWIN_FILE");
- feh_menu_add_entry(m, "Reset", NULL, NULL, CB_RESET, NULL, NULL);
- feh_menu_add_entry(m, "Resize Window", NULL, NULL, CB_FIT, NULL, NULL);
- feh_menu_add_entry(m, "Save Image", NULL, NULL, CB_SAVE_IMAGE, NULL, NULL);
- feh_menu_add_entry(m, "Save List", NULL, NULL, CB_SAVE_FILELIST, NULL, NULL);
- feh_menu_add_entry(m, "Background", NULL, "BACKGROUND", 0, NULL, NULL);
- feh_menu_add_entry(menu_thumbnail_win, NULL, NULL, NULL, 0, NULL, NULL);
- mi = feh_menu_add_entry(menu_thumbnail_win, "Options", NULL, "OPTIONS", 0, NULL, NULL);
+ feh_menu_add_entry(m, "Reset", NULL, CB_RESET, 0, NULL);
+ feh_menu_add_entry(m, "Resize Window", NULL, CB_FIT, 0, NULL);
+ feh_menu_add_entry(m, "Save Image", NULL, CB_SAVE_IMAGE, 0, NULL);
+ feh_menu_add_entry(m, "Save List", NULL, CB_SAVE_FILELIST, 0, NULL);
+ feh_menu_add_entry(m, "Background", "BACKGROUND", 0, 0, NULL);
+ feh_menu_add_entry(menu_thumbnail_win, NULL, NULL, 0, 0, NULL);
+ mi = feh_menu_add_entry(menu_thumbnail_win, "Options", "OPTIONS", 0, 0, NULL);
mi->func_gen_sub = feh_menu_func_gen_options;
- feh_menu_add_entry(menu_thumbnail_win, "About " PACKAGE, NULL, NULL,
- CB_ABOUT, NULL, NULL);
- feh_menu_add_entry(menu_thumbnail_win, "Close", NULL, NULL, CB_CLOSE, NULL, NULL);
- feh_menu_add_entry(menu_thumbnail_win, "Exit", NULL, NULL, CB_EXIT, NULL, NULL);
+ feh_menu_add_entry(menu_thumbnail_win, "Close", NULL, CB_CLOSE, 0, NULL);
+ feh_menu_add_entry(menu_thumbnail_win, "Exit", NULL, CB_EXIT, 0, NULL);
return;
}
@@ -1194,34 +1131,32 @@ void feh_menu_init_thumbnail_viewer(void)
menu_thumbnail_viewer = feh_menu_new();
menu_thumbnail_viewer->name = estrdup("THUMBVIEW");
- feh_menu_add_entry(menu_thumbnail_viewer, "File", NULL, "THUMBVIEW_FILE",
- 0, NULL, NULL);
+ feh_menu_add_entry(menu_thumbnail_viewer, "File", "THUMBVIEW_FILE",
+ 0, 0, NULL);
m = feh_menu_new();
m->name = estrdup("THUMBVIEW_FILE");
- feh_menu_add_entry(m, "Reset", NULL, NULL, CB_RESET, NULL, NULL);
- feh_menu_add_entry(m, "Resize Window", NULL, NULL, CB_FIT, NULL, NULL);
- feh_menu_add_entry(m, "Reload", NULL, NULL, CB_RELOAD, NULL, NULL);
- feh_menu_add_entry(m, "Save Image", NULL, NULL, CB_SAVE_IMAGE, NULL, NULL);
- feh_menu_add_entry(m, "Save List", NULL, NULL, CB_SAVE_FILELIST, NULL, NULL);
- feh_menu_add_entry(m, "Edit in Place", NULL, "EDIT", 0, NULL, NULL);
- feh_menu_add_entry(m, "Background", NULL, "BACKGROUND", 0, NULL, NULL);
- feh_menu_add_entry(m, NULL, NULL, NULL, 0, NULL, NULL);
- feh_menu_add_entry(m, "Hide", NULL, NULL, CB_REMOVE_THUMB, NULL, NULL);
- feh_menu_add_entry(m, "Delete", NULL, "THUMBVIEW_CONFIRM", 0, NULL, NULL);
- mi = feh_menu_add_entry(menu_thumbnail_viewer, "Image Info", NULL,
- "INFO", 0, NULL, NULL);
+ feh_menu_add_entry(m, "Reset", NULL, CB_RESET, 0, NULL);
+ feh_menu_add_entry(m, "Resize Window", NULL, CB_FIT, 0, NULL);
+ feh_menu_add_entry(m, "Reload", NULL, CB_RELOAD, 0, NULL);
+ feh_menu_add_entry(m, "Save Image", NULL, CB_SAVE_IMAGE, 0, NULL);
+ feh_menu_add_entry(m, "Save List", NULL, CB_SAVE_FILELIST, 0, NULL);
+ feh_menu_add_entry(m, "Edit in Place", "EDIT", 0, 0, NULL);
+ feh_menu_add_entry(m, "Background", "BACKGROUND", 0, 0, NULL);
+ feh_menu_add_entry(m, NULL, NULL, 0, 0, NULL);
+ feh_menu_add_entry(m, "Hide", NULL, CB_REMOVE_THUMB, 0, NULL);
+ feh_menu_add_entry(m, "Delete", "THUMBVIEW_CONFIRM", 0, 0, NULL);
+ mi = feh_menu_add_entry(menu_thumbnail_viewer, "Image Info",
+ "INFO", 0, 0, NULL);
mi->func_gen_sub = feh_menu_func_gen_info;
- feh_menu_add_entry(menu_thumbnail_viewer, NULL, NULL, NULL, 0, NULL, NULL);
- mi = feh_menu_add_entry(menu_thumbnail_viewer, "Options", NULL,
- "OPTIONS", 0, NULL, NULL);
+ feh_menu_add_entry(menu_thumbnail_viewer, NULL, NULL, 0, 0, NULL);
+ mi = feh_menu_add_entry(menu_thumbnail_viewer, "Options",
+ "OPTIONS", 0, 0, NULL);
mi->func_gen_sub = feh_menu_func_gen_options;
- feh_menu_add_entry(menu_thumbnail_viewer, "About " PACKAGE, NULL, NULL,
- CB_ABOUT, NULL, NULL);
- feh_menu_add_entry(menu_thumbnail_viewer, "Close", NULL, NULL, CB_CLOSE, NULL, NULL);
- feh_menu_add_entry(menu_thumbnail_viewer, "Exit", NULL, NULL, CB_EXIT, NULL, NULL);
+ feh_menu_add_entry(menu_thumbnail_viewer, "Close", NULL, CB_CLOSE, 0, NULL);
+ feh_menu_add_entry(menu_thumbnail_viewer, "Exit", NULL, CB_EXIT, 0, NULL);
m = feh_menu_new();
m->name = estrdup("THUMBVIEW_CONFIRM");
- feh_menu_add_entry(m, "Confirm", NULL, NULL, CB_DELETE_THUMB, NULL, NULL);
+ feh_menu_add_entry(m, "Confirm", NULL, CB_DELETE_THUMB, 0, NULL);
return;
}
@@ -1240,15 +1175,8 @@ void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i)
int i, rect[4];
winwidget_get_geometry(m->fehwin, rect);
- /* printf("window: (%d, %d)\n", rect[0], rect[1]);
- printf("found %d screens.\n", num_xinerama_screens); */
for (i = 0; i < num_xinerama_screens; i++) {
xinerama_screen = 0;
- /* printf("%d: [%d, %d, %d, %d] (%d, %d)\n",
- i,
- xinerama_screens[i].x_org, xinerama_screens[i].y_org,
- xinerama_screens[i].width, xinerama_screens[i].height,
- rect[0], rect[1]); */
if (XY_IN_RECT(rect[0], rect[1],
xinerama_screens[i].x_org,
xinerama_screens[i].y_org,
@@ -1258,16 +1186,15 @@ void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i)
}
}
- if (getenv("XINERAMA_SCREEN"))
- curr_screen = xinerama_screen =
- atoi(getenv("XINERAMA_SCREEN"));
+ if (opt.xinerama_index >= 0)
+ curr_screen = xinerama_screen = opt.xinerama_index;
}
#endif /* HAVE_LIBXINERAMA */
winwidget_destroy_xwin(m->fehwin);
winwidget_create_window(m->fehwin, m->fehwin->im_w, m->fehwin->im_h);
- winwidget_render_image(m->fehwin, 1, 1);
+ winwidget_render_image(m->fehwin, 1, 0);
winwidget_show(m->fehwin);
#ifdef HAVE_LIBXINERAMA
@@ -1280,54 +1207,38 @@ void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i)
#endif /* HAVE_LIBXINERAMA */
}
-void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
+void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, unsigned short data)
{
char *path;
- Imlib_Image im;
- winwidget winwid;
switch (action) {
case CB_BG_TILED:
- path = feh_absolute_path(FEH_FILE(m->fehwin->file->data)->filename);
- feh_wm_set_bg(path, m->fehwin->im, 0, 0, 0, (int) data, 1);
- free(path);
+ path = FEH_FILE(m->fehwin->file->data)->filename;
+ feh_wm_set_bg(path, m->fehwin->im, 0, 0, 0, data, 0);
break;
case CB_BG_SCALED:
- path = feh_absolute_path(FEH_FILE(m->fehwin->file->data)->filename);
- feh_wm_set_bg(path, m->fehwin->im, 0, 1, 0, (int) data, 1);
- free(path);
+ path = FEH_FILE(m->fehwin->file->data)->filename;
+ feh_wm_set_bg(path, m->fehwin->im, 0, 1, 0, data, 0);
break;
case CB_BG_CENTERED:
- path = feh_absolute_path(FEH_FILE(m->fehwin->file->data)->filename);
- feh_wm_set_bg(path, m->fehwin->im, 1, 0, 0, (int) data, 1);
- free(path);
+ path = FEH_FILE(m->fehwin->file->data)->filename;
+ feh_wm_set_bg(path, m->fehwin->im, 1, 0, 0, data, 0);
break;
case CB_BG_FILLED:
- path = feh_absolute_path(FEH_FILE(m->fehwin->file->data)->filename);
- feh_wm_set_bg(path, m->fehwin->im, 0, 0, 1, (int) data, 1);
- free(path);
+ path = FEH_FILE(m->fehwin->file->data)->filename;
+ feh_wm_set_bg(path, m->fehwin->im, 0, 0, 1, data, 0);
break;
case CB_BG_TILED_NOFILE:
- feh_wm_set_bg(NULL, m->fehwin->im, 0, 0, 0, (int) data, 1);
+ feh_wm_set_bg(NULL, m->fehwin->im, 0, 0, 0, data, 0);
break;
case CB_BG_SCALED_NOFILE:
- feh_wm_set_bg(NULL, m->fehwin->im, 0, 1, 0, (int) data, 1);
+ feh_wm_set_bg(NULL, m->fehwin->im, 0, 1, 0, data, 0);
break;
case CB_BG_CENTERED_NOFILE:
- feh_wm_set_bg(NULL, m->fehwin->im, 1, 0, 0, (int) data, 1);
+ feh_wm_set_bg(NULL, m->fehwin->im, 1, 0, 0, data, 0);
break;
case CB_BG_FILLED_NOFILE:
- feh_wm_set_bg(NULL, m->fehwin->im, 0, 0, 1, (int) data, 1);
- break;
- case CB_ABOUT:
- if (feh_load_image_char(&im, PREFIX "/share/feh/images/about.png")
- != 0) {
- winwid = winwidget_create_from_image(im, "About " PACKAGE,
- WIN_TYPE_ABOUT);
- winwid->file = gib_list_add_front(NULL,
- feh_file_new(PREFIX "/share/feh/images/about.png"));
- winwidget_show(winwid);
- }
+ feh_wm_set_bg(NULL, m->fehwin->im, 0, 0, 1, data, 0);
break;
case CB_CLOSE:
winwidget_destroy(m->fehwin);
@@ -1339,13 +1250,13 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
if (m->fehwin->has_rotated) {
m->fehwin->im_w = gib_imlib_image_get_width(m->fehwin->im);
m->fehwin->im_h = gib_imlib_image_get_height(m->fehwin->im);
- winwidget_resize(m->fehwin, m->fehwin->im_w, m->fehwin->im_h);
+ winwidget_resize(m->fehwin, m->fehwin->im_w, m->fehwin->im_h, 0);
}
winwidget_reset_image(m->fehwin);
- winwidget_render_image(m->fehwin, 1, 1);
+ winwidget_render_image(m->fehwin, 1, 0);
break;
case CB_RELOAD:
- feh_reload_image(m->fehwin, 0, 0);
+ feh_reload_image(m->fehwin, 0, 1);
break;
case CB_REMOVE:
feh_filelist_image_remove(m->fehwin, 0);
@@ -1364,32 +1275,50 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
case CB_SORT_FILENAME:
filelist = gib_list_sort(filelist, feh_cmp_filename);
if (opt.jump_on_resort) {
- slideshow_change_image(m->fehwin, SLIDE_FIRST);
+ slideshow_change_image(m->fehwin, SLIDE_FIRST, 1);
}
break;
case CB_SORT_IMAGENAME:
filelist = gib_list_sort(filelist, feh_cmp_name);
if (opt.jump_on_resort) {
- slideshow_change_image(m->fehwin, SLIDE_FIRST);
+ slideshow_change_image(m->fehwin, SLIDE_FIRST, 1);
+ }
+ break;
+ case CB_SORT_DIRNAME:
+ filelist = gib_list_sort(filelist, feh_cmp_dirname);
+ if (opt.jump_on_resort) {
+ slideshow_change_image(m->fehwin, SLIDE_FIRST, 1);
+ }
+ break;
+ case CB_SORT_MTIME:
+ filelist = gib_list_sort(filelist, feh_cmp_mtime);
+ if (opt.jump_on_resort) {
+ slideshow_change_image(m->fehwin, SLIDE_FIRST, 1);
}
break;
case CB_SORT_FILESIZE:
filelist = gib_list_sort(filelist, feh_cmp_size);
if (opt.jump_on_resort) {
- slideshow_change_image(m->fehwin, SLIDE_FIRST);
+ slideshow_change_image(m->fehwin, SLIDE_FIRST, 1);
}
break;
case CB_SORT_RANDOMIZE:
filelist = gib_list_randomize(filelist);
if (opt.jump_on_resort) {
- slideshow_change_image(m->fehwin, SLIDE_FIRST);
+ slideshow_change_image(m->fehwin, SLIDE_FIRST, 1);
}
break;
case CB_FIT:
winwidget_size_to_image(m->fehwin);
break;
case CB_EDIT_ROTATE:
- feh_edit_inplace_orient(m->fehwin, (int) data);
+ feh_edit_inplace(m->fehwin, data);
+ break;
+ case CB_EDIT_MIRROR:
+ feh_edit_inplace(m->fehwin, INPLACE_EDIT_MIRROR);
+ break;
+ case CB_EDIT_FLIP:
+ feh_edit_inplace(m->fehwin, INPLACE_EDIT_FLIP);
break;
case CB_SAVE_IMAGE:
slideshow_save_image(m->fehwin);
@@ -1403,7 +1332,7 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
opt.draw_filename = TRUE;
else
opt.draw_filename = FALSE;
- winwidget_rerender_all(0, 1);
+ winwidget_rerender_all(0);
break;
case CB_OPT_DRAW_ACTIONS:
MENU_ITEM_TOGGLE(i);
@@ -1411,7 +1340,7 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
opt.draw_actions = TRUE;
else
opt.draw_actions = FALSE;
- winwidget_rerender_all(0, 1);
+ winwidget_rerender_all(0);
break;
case CB_OPT_KEEP_HTTP:
MENU_ITEM_TOGGLE(i);
@@ -1435,8 +1364,18 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
break;
case CB_OPT_AUTO_ZOOM:
MENU_ITEM_TOGGLE(i);
- opt.auto_zoom = MENU_ITEM_IS_ON(i) ? 1 : 0;
- winwidget_rerender_all(1, 1);
+ if (MENU_ITEM_IS_ON(i))
+ opt.zoom_mode = ZOOM_MODE_MAX;
+ else
+ opt.zoom_mode = 0;
+ winwidget_rerender_all(1);
+ break;
+ case CB_OPT_KEEP_ZOOM_VP:
+ MENU_ITEM_TOGGLE(i);
+ if (MENU_ITEM_IS_ON(i))
+ opt.keep_zoom_vp = 1;
+ else
+ opt.keep_zoom_vp = 0;
break;
}
return;
@@ -1458,16 +1397,16 @@ static feh_menu *feh_menu_func_gen_info(feh_menu * m)
mm = feh_menu_new();
mm->name = estrdup("INFO");
snprintf(buffer, sizeof(buffer), "Filename: %s", file->name);
- feh_menu_add_entry(mm, buffer, NULL, NULL, 0, NULL, NULL);
+ feh_menu_add_entry(mm, buffer, NULL, 0, 0, NULL);
if (!file->info)
feh_file_info_load(file, im);
if (file->info) {
- snprintf(buffer, sizeof(buffer), "Size: %dKb", file->info->size / 1024);
- feh_menu_add_entry(mm, buffer, NULL, NULL, 0, NULL, NULL);
+ snprintf(buffer, sizeof(buffer), "Size: %dKb", file->size / 1024);
+ feh_menu_add_entry(mm, buffer, NULL, 0, 0, NULL);
snprintf(buffer, sizeof(buffer), "Dimensions: %dx%d", file->info->width, file->info->height);
- feh_menu_add_entry(mm, buffer, NULL, NULL, 0, NULL, NULL);
+ feh_menu_add_entry(mm, buffer, NULL, 0, 0, NULL);
snprintf(buffer, sizeof(buffer), "Type: %s", file->info->format);
- feh_menu_add_entry(mm, buffer, NULL, NULL, 0, NULL, NULL);
+ feh_menu_add_entry(mm, buffer, NULL, 0, 0, NULL);
}
mm->func_free = feh_menu_func_free_info;
@@ -1487,20 +1426,23 @@ static feh_menu *feh_menu_func_gen_options(feh_menu * m)
mm = feh_menu_new();
mm->name = estrdup("OPTIONS");
mm->fehwin = m->fehwin;
- feh_menu_add_toggle_entry(mm, "Auto-Zoom", NULL, NULL, CB_OPT_AUTO_ZOOM, NULL, NULL, opt.auto_zoom);
- feh_menu_add_toggle_entry(mm, "Freeze Window Size", NULL, NULL,
- CB_OPT_FREEZE_WINDOW, NULL, NULL, opt.geom_flags);
- feh_menu_add_toggle_entry(mm, "Fullscreen", NULL, NULL,
- CB_OPT_FULLSCREEN, NULL, NULL, m->fehwin->full_screen);
-
- feh_menu_add_entry(mm, NULL, NULL, NULL, 0, NULL, NULL);
-
- feh_menu_add_toggle_entry(mm, "Draw Filename", NULL, NULL,
- CB_OPT_DRAW_FILENAME, NULL, NULL, opt.draw_filename);
- feh_menu_add_toggle_entry(mm, "Draw Actions", NULL, NULL,
- CB_OPT_DRAW_ACTIONS, NULL, NULL, opt.draw_actions);
- feh_menu_add_toggle_entry(mm, "Keep HTTP Files", NULL, NULL,
- CB_OPT_KEEP_HTTP, NULL, NULL, opt.keep_http);
+ feh_menu_add_toggle_entry(mm, "Auto-Zoom", NULL, CB_OPT_AUTO_ZOOM,
+ 0, NULL, opt.zoom_mode);
+ feh_menu_add_toggle_entry(mm, "Freeze Window Size", NULL,
+ CB_OPT_FREEZE_WINDOW, 0, NULL, opt.geom_flags);
+ feh_menu_add_toggle_entry(mm, "Fullscreen", NULL,
+ CB_OPT_FULLSCREEN, 0, NULL, m->fehwin->full_screen);
+ feh_menu_add_toggle_entry(mm, "Keep viewport zoom & pos", NULL,
+ CB_OPT_KEEP_ZOOM_VP, 0, NULL, opt.keep_zoom_vp);
+
+ feh_menu_add_entry(mm, NULL, NULL, 0, 0, NULL);
+
+ feh_menu_add_toggle_entry(mm, "Draw Filename", NULL,
+ CB_OPT_DRAW_FILENAME, 0, NULL, opt.draw_filename);
+ feh_menu_add_toggle_entry(mm, "Draw Actions", NULL,
+ CB_OPT_DRAW_ACTIONS, 0, NULL, opt.draw_actions);
+ feh_menu_add_toggle_entry(mm, "Keep HTTP Files", NULL,
+ CB_OPT_KEEP_HTTP, 0, NULL, opt.keep_http);
mm->func_free = feh_menu_func_free_options;
return(mm);
}