diff options
Diffstat (limited to 'src/menu.c')
-rw-r--r-- | src/menu.c | 1341 |
1 files changed, 516 insertions, 825 deletions
@@ -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,53 +35,56 @@ 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; static feh_menu_list *menus = NULL; static int common_menus = 0; -static void feh_menu_cb_about(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_close(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_exit(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_reload(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_remove(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_delete(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_reset(feh_menu * m, feh_menu_item * i, void *data); - -static void feh_menu_cb_remove_thumb(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_delete_thumb(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_tiled(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_scaled(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_seamless(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_centered(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_filled(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_tiled_no_file(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_scaled_no_file(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_centered_no_file(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_background_set_filled_no_file(feh_menu * m, feh_menu_item * i, void *data); - -static void feh_menu_cb_sort_filename(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_sort_imagename(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_sort_filesize(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_sort_randomize(feh_menu * m, feh_menu_item * i, void *data); -static feh_menu *feh_menu_func_gen_info(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_func_free_info(feh_menu * m, void *data); -static void feh_menu_cb_save_image(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_save_filelist(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_fit(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_opt_draw_filename(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_opt_keep_http(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_opt_freeze_window(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_func_free_options(feh_menu * m, void *data); -static feh_menu *feh_menu_func_gen_options(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_edit_rotate(feh_menu * m, feh_menu_item * i, void *data); -static void feh_menu_cb_opt_auto_zoom(feh_menu * m, feh_menu_item * i, void *data); -#ifdef HAVE_LIBXINERAMA -static void feh_menu_cb_opt_xinerama(feh_menu * m, feh_menu_item * i, void *data); -#endif /* HAVE_LIBXINERAMA */ +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, unsigned short data); +void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i); + +enum { + 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) { @@ -90,8 +94,6 @@ feh_menu *feh_menu_new(void) static Imlib_Image bg = NULL; static Imlib_Border border; - D_ENTER(4); - m = (feh_menu *) emalloc(sizeof(feh_menu)); attr.backing_store = NotUseful; @@ -124,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; @@ -134,12 +136,10 @@ 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 = opt.menu_border; - border.right = opt.menu_border; - border.top = opt.menu_border; - border.bottom = opt.menu_border; + border.left = border.right = border.top = border.bottom + = 4; imlib_context_set_image(bg); imlib_image_set_border(&border); } @@ -148,7 +148,7 @@ feh_menu *feh_menu_new(void) if (bg) m->bg = gib_imlib_clone_image(bg); - D_RETURN(4, m); + return(m); } void feh_menu_free(feh_menu * m) @@ -156,8 +156,6 @@ void feh_menu_free(feh_menu * m) feh_menu_item *i; feh_menu_list *l, *pl = NULL; - D_ENTER(4); - if (m->name) free(m->name); XDestroyWindow(disp, m->win); @@ -170,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) @@ -190,24 +186,25 @@ void feh_menu_free(feh_menu * m) } pl = l; } + if (m->bg) + gib_imlib_free_image_and_decache(m->bg); + free(m); - D_RETURN_(4); + return; } feh_menu_item *feh_menu_find_selected(feh_menu * m) { feh_menu_item *i; - D_ENTER(4); - - D(5, ("menu %p\n", m)); + D(("menu %p\n", m)); for (i = m->items; i; i = i->next) { if (MENU_ITEM_IS_SELECTED(i)) - D_RETURN(4, i); + return(i); } - D_RETURN(4, NULL); + return(NULL); } feh_menu_item *feh_menu_find_selected_r(feh_menu * m, feh_menu ** parent) @@ -215,27 +212,25 @@ feh_menu_item *feh_menu_find_selected_r(feh_menu * m, feh_menu ** parent) feh_menu_item *i, *ii; feh_menu *mm; - D_ENTER(4); - - D(5, ("menu %p\n", m)); + D(("menu %p\n", m)); for (i = m->items; i; i = i->next) { if (MENU_ITEM_IS_SELECTED(i)) { if (parent) *parent = m; - D_RETURN(4, i); + return(i); } else if (i->submenu) { mm = feh_menu_find(i->submenu); if (mm) { ii = feh_menu_find_selected_r(mm, parent); if (ii) - D_RETURN(4, ii); + return(ii); } } } if (parent) *parent = m; - D_RETURN(4, NULL); + return(NULL); } void feh_menu_select_next(feh_menu * selected_menu, feh_menu_item * selected_item) @@ -250,7 +245,7 @@ void feh_menu_select_next(feh_menu * selected_menu, feh_menu_item * selected_ite i = i->next; if (!i) i = selected_menu->items; - if (i->func || i->submenu || i->func_gen_sub || i->text) { + if (i->action || i->submenu || i->func_gen_sub || i->text) { break; } } @@ -271,11 +266,10 @@ 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; } - if (i->func || i->submenu || i->func_gen_sub || i->text) { + if (i->action || i->submenu || i->func_gen_sub || i->text) { break; } } @@ -284,7 +278,7 @@ void feh_menu_select_prev(feh_menu * selected_menu, feh_menu_item * selected_ite } } -void feh_menu_select_parent(feh_menu * selected_menu, feh_menu_item * selected_item) +void feh_menu_select_parent(feh_menu * selected_menu) { feh_menu *m; feh_menu_item *i; @@ -303,7 +297,7 @@ void feh_menu_select_parent(feh_menu * selected_menu, feh_menu_item * selected_i } } -void feh_menu_select_submenu(feh_menu * selected_menu, feh_menu_item * selected_item) +void feh_menu_select_submenu(feh_menu * selected_menu) { if (selected_menu->next) { feh_menu_deselect_selected(selected_menu); @@ -316,12 +310,12 @@ void feh_menu_item_activate(feh_menu * m, feh_menu_item * i) /* watch out for this. I put it this way around so the menu goes away *before* we perform the action, if we start freeing menus on hiding, it will break ;-) */ - if ((i) && (i->func)) { + if ((i) && (i->action)) { feh_menu_hide(menu_root, False); feh_main_iteration(0); - (i->func) (m, i, i->data); + feh_menu_cb(m, i, i->action, i->data); if (m->func_free) - m->func_free(m, m->data); + m->func_free(m); } } @@ -329,40 +323,36 @@ feh_menu_item *feh_menu_find_at_xy(feh_menu * m, int x, int y) { feh_menu_item *i; - D_ENTER(4); - D(4, ("looking for menu item at %d,%d\n", x, y)); + D(("looking for menu item at %d,%d\n", x, y)); for (i = m->items; i; i = i->next) { if (XY_IN_RECT(x, y, i->x, i->y, i->w, i->h)) { - D(4, ("Found an item\n")); - D_RETURN(4, i); + D(("Found an item\n")); + return(i); } } - D(4, ("didn't find an item\n")); - D_RETURN(4, NULL); + D(("didn't find an item\n")); + return(NULL); } void feh_menu_deselect_selected(feh_menu * m) { feh_menu_item *i; - D_ENTER(4); - if (!m) - D_RETURN_(4); + return; i = feh_menu_find_selected(m); if (i) { - D(4, ("found a selected menu, deselecting it\n")); + D(("found a selected menu, deselecting it\n")); MENU_ITEM_SET_NORMAL(i); m->updates = imlib_update_append_rect(m->updates, i->x, i->y, i->w, i->h); m->needs_redraw = 1; } - D_RETURN_(4); + return; } void feh_menu_select(feh_menu * m, feh_menu_item * i) { - D_ENTER(4); MENU_ITEM_SET_SELECTED(i); m->updates = imlib_update_append_rect(m->updates, i->x, i->y, i->w, i->h); m->needs_redraw = 1; @@ -378,21 +368,19 @@ void feh_menu_select(feh_menu * m, feh_menu_item * i) if (mm) feh_menu_show_at_submenu(mm, m, i); else if (i->func_gen_sub) - feh_menu_show_at_submenu(i->func_gen_sub(m, i, i->data), m, i); + feh_menu_show_at_submenu(i->func_gen_sub(m), m, i); } - D_RETURN_(4); + return; } void feh_menu_show_at(feh_menu * m, int x, int y) { - D_ENTER(4); - if (m->calc) feh_menu_calc_size(m); if (!menu_cover) { XSetWindowAttributes attr; - D(4, ("creating menu cover window\n")); + D(("creating menu cover window\n")); attr.override_redirect = True; attr.do_not_propagate_mask = True; menu_cover = XCreateWindow( @@ -417,15 +405,13 @@ void feh_menu_show_at(feh_menu * m, int x, int y) XRaiseWindow(disp, m->win); feh_menu_redraw(m); XMapWindow(disp, m->win); - D_RETURN_(4); + return; } void feh_menu_show_at_xy(feh_menu * m, winwidget winwid, int x, int y) { - D_ENTER(4); - if (!m) - D_RETURN_(4); + return; if (m->calc) feh_menu_calc_size(m); @@ -453,17 +439,15 @@ void feh_menu_show_at_xy(feh_menu * m, winwidget winwid, int x, int y) y = 0; feh_menu_move(m, x, y); feh_menu_show(m); - D_RETURN_(4); + return; } void feh_menu_show_at_submenu(feh_menu * m, feh_menu * parent_m, feh_menu_item * i) { int mx, my; - D_ENTER(4); - if (!m) - D_RETURN_(4); + return; if (m->calc) feh_menu_calc_size(m); @@ -474,24 +458,20 @@ void feh_menu_show_at_submenu(feh_menu * m, feh_menu * parent_m, feh_menu_item * m->prev = parent_m; feh_menu_move(m, mx, my); feh_menu_show(m); - D_RETURN_(4); + return; } void feh_menu_move(feh_menu * m, int x, int y) { - int dx, dy; - - D_ENTER(4); - if (!m) - D_RETURN_(4); - dx = x - m->x; - dy = y - m->y; + return; + if (m->visible) XMoveWindow(disp, m->win, x, y); + m->x = x; m->y = y; - D_RETURN_(4); + return; } void feh_menu_slide_all_menus_relative(int dx, int dy) @@ -502,7 +482,6 @@ void feh_menu_slide_all_menus_relative(int dx, int dy) int stepx = 0; int stepy = 0; - D_ENTER(4); vector_len = sqrt(dx * dx + dy * dy); if (vector_len) { if (dx) @@ -520,15 +499,13 @@ void feh_menu_slide_all_menus_relative(int dx, int dy) } XWarpPointer(disp, None, None, 0, 0, 0, 0, stepx, stepy); } - D_RETURN_(4); + return; } void feh_menu_hide(feh_menu * m, int func_free) { - D_ENTER(4); - if (!m->visible) - D_RETURN_(4); + return; if (m->next) { m->next->prev = NULL; feh_menu_hide(m->next, func_free); @@ -536,7 +513,7 @@ void feh_menu_hide(feh_menu * m, int func_free) } if (m == menu_root) { if (menu_cover) { - D(4, ("DESTROYING menu cover\n")); + D(("DESTROYING menu cover\n")); XDestroyWindow(disp, menu_cover); menu_cover = 0; } @@ -545,44 +522,40 @@ void feh_menu_hide(feh_menu * m, int func_free) m->visible = 0; XUnmapWindow(disp, m->win); if (func_free && m->func_free) - m->func_free(m, m->data); + m->func_free(m); else feh_menu_deselect_selected(m); - D_RETURN_(4); + return; } void feh_menu_show(feh_menu * m) { - D_ENTER(4); if (!m) - D_RETURN_(4); + return; feh_menu_show_at(m, m->x, m->y); - D_RETURN_(4); + return; } feh_menu_item *feh_menu_add_toggle_entry(feh_menu * m, char *text, - Imlib_Image icon, char *submenu, menu_func func, - 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; - D_ENTER(4); - mi = feh_menu_add_entry(m, text, icon, submenu, func, 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); - D_RETURN(4, mi); + return(mi); } -feh_menu_item *feh_menu_add_entry(feh_menu * m, char *text, Imlib_Image icon, - char *submenu, menu_func func, 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; - D_ENTER(4); 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); @@ -592,7 +565,7 @@ feh_menu_item *feh_menu_add_entry(feh_menu * m, char *text, Imlib_Image icon, mi->submenu = estrdup(submenu); else mi->submenu = NULL; - mi->func = func; + mi->action = action; mi->func_free = func_free; mi->data = data; mi->func_gen_sub = NULL; @@ -611,17 +584,15 @@ feh_menu_item *feh_menu_add_entry(feh_menu * m, char *text, Imlib_Image icon, } } m->calc = 1; - D_RETURN(4, mi); + 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; - D_ENTER(4); - 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 { @@ -629,18 +600,15 @@ void feh_menu_entry_get_size(feh_menu * m, feh_menu_item * i, int *w, int *h) *h = FEH_MENUITEM_PAD_TOP + FEH_MENUITEM_PAD_BOTTOM; } - D_RETURN_(4); - m = NULL; + return; } 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; - - D_ENTER(4); + 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; @@ -649,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) @@ -667,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) @@ -706,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) @@ -716,7 +661,7 @@ void feh_menu_calc_size(feh_menu * m) XResizeWindow(disp, m->win, m->w, m->h); m->updates = imlib_update_append_rect(m->updates, 0, 0, m->w, m->h); } - D(4, ("menu size calculated. w=%d h=%d\n", m->w, m->h)); + D(("menu size calculated. w=%d h=%d\n", m->w, m->h)); /* Make sure bg is same size */ if (m->bg) { @@ -728,7 +673,7 @@ void feh_menu_calc_size(feh_menu * m) if (m->w != bg_w || m->h != bg_h) { Imlib_Image newim = imlib_create_image(m->w, m->h); - D(3, ("resizing bg to %dx%d\n", m->w, m->h)); + D(("resizing bg to %dx%d\n", m->w, m->h)); gib_imlib_blend_image_onto_image(newim, m->bg, 0, 0, 0, bg_w, bg_h, 0, 0, m->w, m->h, 0, 0, 1); gib_imlib_free_image_and_decache(m->bg); @@ -736,66 +681,31 @@ void feh_menu_calc_size(feh_menu * m) } } - D_RETURN_(4); + return; } -void feh_menu_draw_item(feh_menu * m, feh_menu_item * i, Imlib_Image im, int ox, int oy) +void feh_menu_draw_item(feh_menu_item * i, Imlib_Image im, int ox, int oy) { - D_ENTER(5); - - D(5, ("drawing item %p (text %s) on menu %p (name %s)\n", i, i->text, m, m->name)); + D(("drawing item %p (text %s)\n", i, i->text)); if (i->text) { - D(5, ("text item\n")); + D(("text item\n")); if (MENU_ITEM_IS_SELECTED(i)) { - D(5, ("selected item\n")); + D(("selected item\n")); /* draw selected image */ feh_menu_item_draw_at(i->x, i->y, i->w, i->h, im, ox, oy, 1); } else { - D(5, ("unselected item\n")); + D(("unselected item\n")); /* draw unselected image */ feh_menu_item_draw_at(i->x, i->y, i->w, i->h, im, ox, oy, 0); } /* 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(5, ("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(5, ("submenu item\n")); + D(("submenu item\n")); feh_menu_draw_submenu_at(i->x + i->sub_x, i->y + FEH_MENUITEM_PAD_TOP + @@ -804,11 +714,10 @@ void feh_menu_draw_item(feh_menu * m, feh_menu_item * i, Imlib_Image im, int ox, FEH_MENUITEM_PAD_BOTTOM - FEH_MENU_SUBMENU_H) / - 2), FEH_MENU_SUBMENU_W, - FEH_MENU_SUBMENU_H, im, ox, oy, MENU_ITEM_IS_SELECTED(i)); + 2), im, ox, oy); } if (i->is_toggle) { - D(5, ("toggleable item\n")); + D(("toggleable item\n")); feh_menu_draw_toggle_at(i->x + i->toggle_x, i->y + FEH_MENUITEM_PAD_TOP + @@ -819,21 +728,18 @@ void feh_menu_draw_item(feh_menu * m, feh_menu_item * i, Imlib_Image im, int ox, FEH_MENU_TOGGLE_W, FEH_MENU_TOGGLE_H, im, ox, oy, MENU_ITEM_IS_ON(i)); } } else { - D(5, ("separator item\n")); + D(("separator item\n")); feh_menu_draw_separator_at(i->x, i->y, i->w, i->h, im, ox, oy); } - D_RETURN_(5); - m = NULL; + return; } void feh_menu_redraw(feh_menu * m) { Imlib_Updates u, uu; - D_ENTER(5); - if ((!m->needs_redraw) || (!m->visible) || (!m->updates)) - D_RETURN_(5); + return; m->needs_redraw = 0; if (!m->pmap) m->pmap = XCreatePixmap(disp, m->win, m->w, m->h, depth); @@ -842,13 +748,13 @@ void feh_menu_redraw(feh_menu * m) u = imlib_updates_merge_for_rendering(m->updates, m->w, m->h); m->updates = NULL; if (u) { - D(5, ("I have updates to render\n")); + D(("I have updates to render\n")); for (uu = u; u; u = imlib_updates_get_next(u)) { int x, y, w, h; Imlib_Image im; imlib_updates_get_coordinates(u, &x, &y, &w, &h); - D(5, ("update coords %d,%d %d*%d\n", x, y, w, h)); + D(("update coords %d,%d %d*%d\n", x, y, w, h)); im = imlib_create_image(w, h); gib_imlib_image_fill_rectangle(im, 0, 0, w, h, 0, 0, 0, 0); if (im) { @@ -860,19 +766,18 @@ void feh_menu_redraw(feh_menu * m) } imlib_updates_free(uu); } - D_RETURN_(5); + return; } feh_menu *feh_menu_find(char *name) { feh_menu_list *l; - D_ENTER(4); for (l = menus; l; l = l->next) { if ((l->menu->name) && (!strcmp(l->menu->name, name))) - D_RETURN(4, l->menu); + return(l->menu); } - D_RETURN(4, NULL); + return(NULL); } void feh_menu_draw_to_buf(feh_menu * m, Imlib_Image im, int ox, int oy) @@ -880,7 +785,6 @@ void feh_menu_draw_to_buf(feh_menu * m, Imlib_Image im, int ox, int oy) feh_menu_item *i; int w, h; - D_ENTER(5); w = gib_imlib_image_get_width(im); h = gib_imlib_image_get_height(im); @@ -888,17 +792,15 @@ void feh_menu_draw_to_buf(feh_menu * m, Imlib_Image im, int ox, int oy) for (i = m->items; i; i = i->next) { if (RECTS_INTERSECT(i->x, i->y, i->w, i->h, ox, oy, w, h)) - feh_menu_draw_item(m, i, im, ox, oy); + feh_menu_draw_item(i, im, ox, oy); } - D_RETURN_(5); + return; } void feh_menu_draw_menu_bg(feh_menu * m, Imlib_Image im, int ox, int oy) { int w, h; - D_ENTER(5); - w = gib_imlib_image_get_width(im); h = gib_imlib_image_get_height(im); @@ -907,103 +809,81 @@ void feh_menu_draw_menu_bg(feh_menu * m, Imlib_Image im, int ox, int oy) else gib_imlib_image_fill_rectangle(im, 0, 0, w, h, 205, 203, 176, 255); - D_RETURN_(5); + return; } void feh_menu_draw_toggle_at(int x, int y, int w, int h, Imlib_Image dst, int ox, int oy, int on) { - D_ENTER(5); x -= ox; y -= oy; if (on) gib_imlib_image_fill_rectangle(dst, x, y, w, h, 0, 0, 0, 255); else gib_imlib_image_draw_rectangle(dst, x, y, w, h, 0, 0, 0, 255); - D_RETURN_(5); + return; } -void feh_menu_draw_submenu_at(int x, int y, int w, int h, Imlib_Image dst, int ox, int oy, int selected) +void feh_menu_draw_submenu_at(int x, int y, Imlib_Image dst, int ox, int oy) { - ImlibPolygon poly; - - D_ENTER(5); - - 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); - D_RETURN_(5); - selected = 0; + for (int i= 0; i <= 3; i++) { + imlib_image_draw_line(x+i, y+3+i, x+i, y+9-i, 0); + } + + return; } void feh_menu_draw_separator_at(int x, int y, int w, int h, Imlib_Image dst, int ox, int oy) { - D_ENTER(5); gib_imlib_image_fill_rectangle(dst, x - ox + 2, y - oy + 2, w - 4, h - 4, 0, 0, 0, 255); - D_RETURN_(5); + return; } void feh_menu_item_draw_at(int x, int y, int w, int h, Imlib_Image dst, int ox, int oy, int selected) { - D_ENTER(5); imlib_context_set_image(dst); if (selected) - gib_imlib_image_fill_rectangle(dst, x - ox, y - oy, w, h, 255, 255, 255, 178); - D_RETURN_(5); + gib_imlib_image_fill_rectangle(dst, x - ox, y - oy, w, h, 127, 127, 127, 178); + return; } void feh_raise_all_menus(void) { feh_menu_list *l; - D_ENTER(5); - for (l = menus; l; l = l->next) { if (l->menu->visible) XRaiseWindow(disp, l->menu->win); } - D_RETURN_(5); + return; } void feh_redraw_menus(void) { feh_menu_list *l; - D_ENTER(5); - for (l = menus; l; l = l->next) { if (l->menu->needs_redraw) feh_menu_redraw(l->menu); } - D_RETURN_(5); + return; } feh_menu *feh_menu_get_from_window(Window win) { feh_menu_list *l; - D_ENTER(5); for (l = menus; l; l = l->next) if (l->menu->win == win) - D_RETURN(5, l->menu); - D_RETURN(5, NULL); + return(l->menu); + return(NULL); } void feh_menu_init_main(void) @@ -1011,116 +891,104 @@ void feh_menu_init_main(void) feh_menu *m; feh_menu_item *mi; - D_ENTER(4); if (!common_menus) feh_menu_init_common(); menu_main = feh_menu_new(); menu_main->name = estrdup("MAIN"); - feh_menu_add_entry(menu_main, "File", NULL, "FILE", NULL, 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", NULL, NULL, NULL); - mi = feh_menu_add_entry(menu_main, "Image Info", NULL, "INFO", NULL, 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, NULL, NULL, NULL); + feh_menu_add_entry(menu_main, NULL, NULL, 0, 0, NULL); } - mi = feh_menu_add_entry(menu_main, "Options", NULL, "OPTIONS", NULL, 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, feh_menu_cb_about, NULL, NULL); if (opt.multiwindow) - feh_menu_add_entry(menu_main, "Close", NULL, NULL, feh_menu_cb_close, NULL, NULL); - feh_menu_add_entry(menu_main, "Exit", NULL, NULL, feh_menu_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, feh_menu_cb_reset, NULL, NULL); - feh_menu_add_entry(m, "Resize Window", NULL, NULL, feh_menu_cb_fit, NULL, NULL); - feh_menu_add_entry(m, "Reload", NULL, NULL, feh_menu_cb_reload, NULL, NULL); - feh_menu_add_entry(m, "Save Image", NULL, NULL, feh_menu_cb_save_image, NULL, NULL); - feh_menu_add_entry(m, "Save List", NULL, NULL, feh_menu_cb_save_filelist, NULL, NULL); - feh_menu_add_entry(m, "Edit in Place", NULL, "EDIT", NULL, NULL, NULL); - feh_menu_add_entry(m, "Background", NULL, "BACKGROUND", NULL, NULL, NULL); - feh_menu_add_entry(m, NULL, NULL, NULL, NULL, NULL, NULL); - feh_menu_add_entry(m, "Hide", NULL, NULL, feh_menu_cb_remove, NULL, NULL); - feh_menu_add_entry(m, "Delete", NULL, "CONFIRM", NULL, NULL, NULL); - - D_RETURN_(4); + 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]; feh_menu *m; - D_ENTER(4); - if (!opt.menu_fn) { 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, feh_menu_cb_sort_filename, NULL, NULL); - feh_menu_add_entry(m, "By Image Name", NULL, NULL, feh_menu_cb_sort_imagename, NULL, NULL); - if (opt.preload || (opt.sort > SORT_FILENAME)) - feh_menu_add_entry(m, "By File Size", NULL, NULL, feh_menu_cb_sort_filesize, NULL, NULL); - feh_menu_add_entry(m, "Randomize", NULL, NULL, feh_menu_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, feh_menu_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, feh_menu_cb_edit_rotate, (void *) 1, NULL); - feh_menu_add_entry(m, "Rotate 180", NULL, NULL, feh_menu_cb_edit_rotate, (void *) 2, NULL); - feh_menu_add_entry(m, "Rotate 90 CCW", NULL, NULL, feh_menu_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", NULL, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Seamless", NULL, "SEAMLESS", NULL, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Scaled", NULL, "SCALED", NULL, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Centered", NULL, "CENTERED", NULL, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Filled", NULL, "FILLED", NULL, 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, - feh_menu_cb_background_set_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, - feh_menu_cb_background_set_tiled_no_file, (void *) i, NULL); - } - - m = feh_menu_new(); - m->name = estrdup("SEAMLESS"); - for (i = 0; i < num_desks; i++) { - snprintf(buf, sizeof(buf), "Desktop %d", i + 1); - feh_menu_add_entry(m, buf, NULL, NULL, feh_menu_cb_background_set_seamless, (void *) i, NULL); + feh_menu_add_entry(m, buf, NULL, CB_BG_TILED_NOFILE, + i, NULL); } m = feh_menu_new(); @@ -1129,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, - feh_menu_cb_background_set_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, - feh_menu_cb_background_set_scaled_no_file, (void *) i, NULL); + feh_menu_add_entry(m, buf, NULL, CB_BG_SCALED_NOFILE, + i, NULL); } m = feh_menu_new(); @@ -1141,12 +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, - feh_menu_cb_background_set_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, - feh_menu_cb_background_set_centered_no_file, - (void *) i, NULL); + feh_menu_add_entry(m, buf, NULL, + CB_BG_CENTERED_NOFILE, i, NULL); } m = feh_menu_new(); @@ -1154,55 +1021,38 @@ 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_cb_background_set_filled, - (void *) i, NULL); + feh_menu_add_entry(m, buf, NULL, + CB_BG_FILLED, + i, NULL); else - feh_menu_add_entry(m, buf, NULL, NULL, - feh_menu_cb_background_set_filled_no_file, - (void *) i, NULL); + feh_menu_add_entry(m, buf, NULL, + CB_BG_FILLED_NOFILE, + i, NULL); } } else { if (opt.slideshow || opt.multiwindow) { - feh_menu_add_entry(menu_bg, "Set Tiled", NULL, - NULL, feh_menu_cb_background_set_tiled, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Seamless", NULL, - NULL, feh_menu_cb_background_set_seamless, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Scaled", NULL, - NULL, feh_menu_cb_background_set_scaled, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Centered", NULL, - NULL, feh_menu_cb_background_set_centered, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Filled", NULL, - NULL, feh_menu_cb_background_set_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, feh_menu_cb_background_set_tiled_no_file, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Seamless", NULL, - NULL, feh_menu_cb_background_set_seamless, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Scaled", NULL, - NULL, feh_menu_cb_background_set_scaled_no_file, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Centered", NULL, - NULL, feh_menu_cb_background_set_centered_no_file, NULL, NULL); - feh_menu_add_entry(menu_bg, "Set Filled", NULL, - NULL, feh_menu_cb_background_set_filled_no_file, 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; - D_RETURN_(4); -} - -void feh_menu_init_about_win(void) -{ - D_ENTER(4); - - menu_about_win = feh_menu_new(); - menu_about_win->name = estrdup("ABOUTWIN"); - - feh_menu_add_entry(menu_about_win, "Close", NULL, NULL, feh_menu_cb_close, NULL, NULL); - feh_menu_add_entry(menu_about_win, "Exit", NULL, NULL, feh_menu_cb_exit, NULL, NULL); - - D_RETURN_(4); + return; } void feh_menu_init_single_win(void) @@ -1210,39 +1060,37 @@ void feh_menu_init_single_win(void) feh_menu *m; feh_menu_item *mi; - D_ENTER(4); if (!common_menus) feh_menu_init_common(); menu_single_win = feh_menu_new(); menu_single_win->name = estrdup("SINGLEWIN"); - feh_menu_add_entry(menu_single_win, "File", NULL, "SINGLEWIN_FILE", NULL, 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, feh_menu_cb_reset, NULL, NULL); - feh_menu_add_entry(m, "Resize Window", NULL, NULL, feh_menu_cb_fit, NULL, NULL); - feh_menu_add_entry(m, "Reload", NULL, NULL, feh_menu_cb_reload, NULL, NULL); - feh_menu_add_entry(m, "Save Image", NULL, NULL, feh_menu_cb_save_image, NULL, NULL); - feh_menu_add_entry(m, "Save List", NULL, NULL, feh_menu_cb_save_filelist, NULL, NULL); - feh_menu_add_entry(m, "Edit in Place", NULL, "EDIT", NULL, NULL, NULL); - feh_menu_add_entry(m, "Background", NULL, "BACKGROUND", NULL, 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, NULL, NULL, NULL); - feh_menu_add_entry(m, "Hide", NULL, NULL, feh_menu_cb_remove, NULL, NULL); - feh_menu_add_entry(m, "Delete", NULL, "CONFIRM", NULL, 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", NULL, 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, NULL, NULL, NULL); - mi = feh_menu_add_entry(menu_single_win, "Options", NULL, "OPTIONS", NULL, 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, feh_menu_cb_about, NULL, NULL); - feh_menu_add_entry(menu_single_win, "Close", NULL, NULL, feh_menu_cb_close, NULL, NULL); - feh_menu_add_entry(menu_single_win, "Exit", NULL, NULL, feh_menu_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); - D_RETURN_(4); + return; } void feh_menu_init_thumbnail_win(void) @@ -1250,28 +1098,26 @@ void feh_menu_init_thumbnail_win(void) feh_menu *m; feh_menu_item *mi; - D_ENTER(4); if (!common_menus) feh_menu_init_common(); menu_thumbnail_win = feh_menu_new(); menu_thumbnail_win->name = estrdup("THUMBWIN"); - feh_menu_add_entry(menu_thumbnail_win, "File", NULL, "THUMBWIN_FILE", NULL, 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, feh_menu_cb_reset, NULL, NULL); - feh_menu_add_entry(m, "Resize Window", NULL, NULL, feh_menu_cb_fit, NULL, NULL); - feh_menu_add_entry(m, "Save Image", NULL, NULL, feh_menu_cb_save_image, NULL, NULL); - feh_menu_add_entry(m, "Save List", NULL, NULL, feh_menu_cb_save_filelist, NULL, NULL); - feh_menu_add_entry(m, "Background", NULL, "BACKGROUND", NULL, NULL, NULL); - feh_menu_add_entry(menu_thumbnail_win, NULL, NULL, NULL, NULL, NULL, NULL); - mi = feh_menu_add_entry(menu_thumbnail_win, "Options", NULL, "OPTIONS", NULL, 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, feh_menu_cb_about, NULL, NULL); - feh_menu_add_entry(menu_thumbnail_win, "Close", NULL, NULL, feh_menu_cb_close, NULL, NULL); - feh_menu_add_entry(menu_thumbnail_win, "Exit", NULL, NULL, feh_menu_cb_exit, NULL, NULL); - D_RETURN_(4); + 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; } void feh_menu_init_thumbnail_viewer(void) @@ -1279,485 +1125,330 @@ void feh_menu_init_thumbnail_viewer(void) feh_menu *m; feh_menu_item *mi; - D_ENTER(4); if (!common_menus) feh_menu_init_common(); menu_thumbnail_viewer = feh_menu_new(); menu_thumbnail_viewer->name = estrdup("THUMBVIEW"); - feh_menu_add_entry(menu_thumbnail_viewer, "File", NULL, "THUMBVIEW_FILE", NULL, 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, feh_menu_cb_reset, NULL, NULL); - feh_menu_add_entry(m, "Resize Window", NULL, NULL, feh_menu_cb_fit, NULL, NULL); - feh_menu_add_entry(m, "Reload", NULL, NULL, feh_menu_cb_reload, NULL, NULL); - feh_menu_add_entry(m, "Save Image", NULL, NULL, feh_menu_cb_save_image, NULL, NULL); - feh_menu_add_entry(m, "Save List", NULL, NULL, feh_menu_cb_save_filelist, NULL, NULL); - feh_menu_add_entry(m, "Edit in Place", NULL, "EDIT", NULL, NULL, NULL); - feh_menu_add_entry(m, "Background", NULL, "BACKGROUND", NULL, NULL, NULL); - feh_menu_add_entry(m, NULL, NULL, NULL, NULL, NULL, NULL); - feh_menu_add_entry(m, "Hide", NULL, NULL, feh_menu_cb_remove_thumb, NULL, NULL); - feh_menu_add_entry(m, "Delete", NULL, "THUMBVIEW_CONFIRM", NULL, NULL, NULL); - mi = feh_menu_add_entry(menu_thumbnail_viewer, "Image Info", NULL, "INFO", NULL, 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, NULL, NULL, NULL); - mi = feh_menu_add_entry(menu_thumbnail_viewer, "Options", NULL, "OPTIONS", NULL, 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, feh_menu_cb_about, NULL, NULL); - feh_menu_add_entry(menu_thumbnail_viewer, "Close", NULL, NULL, feh_menu_cb_close, NULL, NULL); - feh_menu_add_entry(menu_thumbnail_viewer, "Exit", NULL, NULL, feh_menu_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, feh_menu_cb_delete_thumb, NULL, NULL); - D_RETURN_(4); -} - -static void feh_menu_cb_background_set_tiled(feh_menu * m, feh_menu_item * i, void *data) -{ - char *path; - - D_ENTER(4); - 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); - D_RETURN_(4); - i = NULL; -} - -static void feh_menu_cb_background_set_seamless(feh_menu * m, feh_menu_item * i, void *data) -{ - Imlib_Image im; - - D_ENTER(4); - im = gib_imlib_clone_image(m->fehwin->im); - gib_imlib_image_tile(im); - feh_wm_set_bg(NULL, im, 0, 0, 0, (int) data, 1); - gib_imlib_free_image_and_decache(im); - D_RETURN_(4); - i = NULL; + feh_menu_add_entry(m, "Confirm", NULL, CB_DELETE_THUMB, 0, NULL); + return; } -static void feh_menu_cb_background_set_scaled(feh_menu * m, feh_menu_item * i, void *data) +void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i) { - char *path; - - D_ENTER(4); - 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); - D_RETURN_(4); - i = NULL; -} - -static void feh_menu_cb_background_set_centered(feh_menu * m, feh_menu_item * i, void *data) -{ - char *path; - - D_ENTER(4); - 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); - D_RETURN_(4); - i = NULL; -} - -static void feh_menu_cb_background_set_filled(feh_menu * m, feh_menu_item * i, void *data) -{ - char *path; - - D_ENTER(4); - 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); - D_RETURN_(4); - i = NULL; -} - -static void feh_menu_cb_background_set_tiled_no_file(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_wm_set_bg(NULL, m->fehwin->im, 0, 0, 0, (int) data, 1); - D_RETURN_(4); - i = NULL; -} + int curr_screen = 0; -static void feh_menu_cb_background_set_scaled_no_file(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_wm_set_bg(NULL, m->fehwin->im, 0, 1, 0, (int) data, 1); - D_RETURN_(4); - i = NULL; -} + MENU_ITEM_TOGGLE(i); + if (MENU_ITEM_IS_ON(i)) + m->fehwin->full_screen = TRUE; + else + m->fehwin->full_screen = FALSE; -static void feh_menu_cb_background_set_centered_no_file(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_wm_set_bg(NULL, m->fehwin->im, 1, 0, 0, (int) data, 1); - D_RETURN_(4); - i = NULL; -} +#ifdef HAVE_LIBXINERAMA + if (opt.xinerama && xinerama_screens) { + int i, rect[4]; -static void feh_menu_cb_background_set_filled_no_file(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_wm_set_bg(NULL, m->fehwin->im, 0, 0, 1, (int) data, 1); - D_RETURN_(4); - i = NULL; -} + winwidget_get_geometry(m->fehwin, rect); + for (i = 0; i < num_xinerama_screens; i++) { + xinerama_screen = 0; + if (XY_IN_RECT(rect[0], rect[1], + xinerama_screens[i].x_org, + xinerama_screens[i].y_org, + xinerama_screens[i].width, xinerama_screens[i].height)) { + curr_screen = xinerama_screen = i; + break; + } -static void feh_menu_cb_about(feh_menu * m, feh_menu_item * i, void *data) -{ - Imlib_Image im; - winwidget winwid; - - D_ENTER(4); - 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); + } + if (opt.xinerama_index >= 0) + curr_screen = xinerama_screen = opt.xinerama_index; } - D_RETURN_(4); - m = NULL; - i = NULL; - data = NULL; -} +#endif /* HAVE_LIBXINERAMA */ -static void feh_menu_cb_close(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - winwidget_destroy(m->fehwin); - D_RETURN_(4); - i = NULL; - data = NULL; -} + winwidget_destroy_xwin(m->fehwin); + winwidget_create_window(m->fehwin, m->fehwin->im_w, m->fehwin->im_h); -static void feh_menu_cb_exit(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - winwidget_destroy_all(); - D_RETURN_(4); - m = NULL; - i = NULL; - data = NULL; -} + winwidget_render_image(m->fehwin, 1, 0); + winwidget_show(m->fehwin); -static void feh_menu_cb_reset(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - 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); +#ifdef HAVE_LIBXINERAMA + /* if we have xinerama and we're using it, then full screen the window + * on the head that the window was active on */ + if (m->fehwin->full_screen == TRUE && opt.xinerama && xinerama_screens) { + xinerama_screen = curr_screen; + winwidget_move(m->fehwin, xinerama_screens[curr_screen].x_org, xinerama_screens[curr_screen].y_org); } - winwidget_reset_image(m->fehwin); - winwidget_render_image(m->fehwin, 1, 1); - D_RETURN_(4); - i = NULL; - data = NULL; -} - -static void feh_menu_cb_reload(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_reload_image(m->fehwin, 0, 0); - D_RETURN_(4); - i = NULL; - data = NULL; -} - -static void feh_menu_cb_remove(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_filelist_image_remove(m->fehwin, 0); - D_RETURN_(4); - i = NULL; - data = NULL; -} - -static void feh_menu_cb_delete(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_filelist_image_remove(m->fehwin, 1); - D_RETURN_(4); - i = NULL; - data = NULL; -} - -static void feh_menu_cb_remove_thumb(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_thumbnail_mark_removed(FEH_FILE(m->fehwin->file->data), 0); - feh_filelist_image_remove(m->fehwin, 0); - D_RETURN_(4); - i = NULL; - data = NULL; -} - -static void feh_menu_cb_delete_thumb(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_thumbnail_mark_removed(FEH_FILE(m->fehwin->file->data), 1); - feh_filelist_image_remove(m->fehwin, 1); - D_RETURN_(4); - i = NULL; - data = NULL; -} - -static void feh_menu_cb_sort_filename(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - filelist = gib_list_sort(filelist, feh_cmp_filename); - if (!opt.no_jump_on_resort) { - slideshow_change_image(m->fehwin, SLIDE_FIRST); - }; - D_RETURN_(4); - i = NULL; - data = NULL; -} - -static void feh_menu_cb_sort_imagename(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - filelist = gib_list_sort(filelist, feh_cmp_name); - if (!opt.no_jump_on_resort) { - slideshow_change_image(m->fehwin, SLIDE_FIRST); - }; - D_RETURN_(4); - i = NULL; - data = NULL; +#endif /* HAVE_LIBXINERAMA */ } -static void feh_menu_cb_sort_filesize(feh_menu * m, feh_menu_item * i, void *data) +void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, unsigned short data) { - D_ENTER(4); - filelist = gib_list_sort(filelist, feh_cmp_size); - if (!opt.no_jump_on_resort) { - slideshow_change_image(m->fehwin, SLIDE_FIRST); - }; - D_RETURN_(4); - i = NULL; - data = NULL; -} + char *path; -static void feh_menu_cb_sort_randomize(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - filelist = gib_list_randomize(filelist); - if (!opt.no_jump_on_resort) { - slideshow_change_image(m->fehwin, SLIDE_FIRST); - }; - D_RETURN_(4); - i = NULL; - data = NULL; + switch (action) { + case CB_BG_TILED: + 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_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_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_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, data, 0); + break; + case CB_BG_SCALED_NOFILE: + 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, data, 0); + break; + case CB_BG_FILLED_NOFILE: + feh_wm_set_bg(NULL, m->fehwin->im, 0, 0, 1, data, 0); + break; + case CB_CLOSE: + winwidget_destroy(m->fehwin); + break; + case CB_EXIT: + winwidget_destroy_all(); + break; + case CB_RESET: + 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, 0); + } + winwidget_reset_image(m->fehwin); + winwidget_render_image(m->fehwin, 1, 0); + break; + case CB_RELOAD: + feh_reload_image(m->fehwin, 0, 1); + break; + case CB_REMOVE: + feh_filelist_image_remove(m->fehwin, 0); + break; + case CB_DELETE: + feh_filelist_image_remove(m->fehwin, 1); + break; + case CB_REMOVE_THUMB: + feh_thumbnail_mark_removed(FEH_FILE(m->fehwin->file->data), 0); + feh_filelist_image_remove(m->fehwin, 0); + break; + case CB_DELETE_THUMB: + feh_thumbnail_mark_removed(FEH_FILE(m->fehwin->file->data), 1); + feh_filelist_image_remove(m->fehwin, 1); + break; + case CB_SORT_FILENAME: + filelist = gib_list_sort(filelist, feh_cmp_filename); + if (opt.jump_on_resort) { + 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, 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, 1); + } + break; + case CB_SORT_RANDOMIZE: + filelist = gib_list_randomize(filelist); + if (opt.jump_on_resort) { + 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(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); + break; + case CB_SAVE_FILELIST: + feh_save_filelist(); + break; + case CB_OPT_DRAW_FILENAME: + MENU_ITEM_TOGGLE(i); + if (MENU_ITEM_IS_ON(i)) + opt.draw_filename = TRUE; + else + opt.draw_filename = FALSE; + winwidget_rerender_all(0); + break; + case CB_OPT_DRAW_ACTIONS: + MENU_ITEM_TOGGLE(i); + if (MENU_ITEM_IS_ON(i)) + opt.draw_actions = TRUE; + else + opt.draw_actions = FALSE; + winwidget_rerender_all(0); + break; + case CB_OPT_KEEP_HTTP: + MENU_ITEM_TOGGLE(i); + if (MENU_ITEM_IS_ON(i)) + opt.keep_http = TRUE; + else + opt.keep_http = FALSE; + break; + case CB_OPT_FREEZE_WINDOW: + MENU_ITEM_TOGGLE(i); + if (MENU_ITEM_IS_ON(i)) { + opt.geom_flags = (WidthValue | HeightValue); + opt.geom_w = m->fehwin->w; + opt.geom_h = m->fehwin->h; + } else { + opt.geom_flags = 0; + } + break; + case CB_OPT_FULLSCREEN: + feh_menu_cb_opt_fullscreen(m, i); + break; + case CB_OPT_AUTO_ZOOM: + MENU_ITEM_TOGGLE(i); + 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; } -static feh_menu *feh_menu_func_gen_info(feh_menu * m, feh_menu_item * i, void *data) +static feh_menu *feh_menu_func_gen_info(feh_menu * m) { Imlib_Image im; feh_menu *mm; feh_file *file; char buffer[400]; - D_ENTER(4); if (!m->fehwin->file) - D_RETURN(4, NULL); + return(NULL); file = FEH_FILE(m->fehwin->file->data); im = m->fehwin->im; if (!im) - D_RETURN(4, NULL); + return(NULL); mm = feh_menu_new(); mm->name = estrdup("INFO"); snprintf(buffer, sizeof(buffer), "Filename: %s", file->name); - feh_menu_add_entry(mm, buffer, NULL, NULL, NULL, 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, NULL, 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, NULL, 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, NULL, NULL, NULL); + feh_menu_add_entry(mm, buffer, NULL, 0, 0, NULL); } mm->func_free = feh_menu_func_free_info; - D_RETURN(4, mm); - i = NULL; - data = NULL; + return(mm); } -static void feh_menu_func_free_info(feh_menu * m, void *data) +static void feh_menu_func_free_info(feh_menu * m) { - D_ENTER(4); feh_menu_free(m); - D_RETURN_(4); - data = NULL; + return; } -static feh_menu *feh_menu_func_gen_options(feh_menu * m, feh_menu_item * i, void *data) +static feh_menu *feh_menu_func_gen_options(feh_menu * m) { feh_menu *mm; - D_ENTER(4); mm = feh_menu_new(); mm->name = estrdup("OPTIONS"); mm->fehwin = m->fehwin; - feh_menu_add_toggle_entry(mm, "Auto-Zoom", NULL, NULL, feh_menu_cb_opt_auto_zoom, NULL, NULL, opt.auto_zoom); - feh_menu_add_toggle_entry(mm, "Freeze Window Size", NULL, NULL, - feh_menu_cb_opt_freeze_window, NULL, NULL, opt.geom_flags); - feh_menu_add_toggle_entry(mm, "Fullscreen", NULL, NULL, - feh_menu_cb_opt_fullscreen, NULL, NULL, m->fehwin->full_screen); -#ifdef HAVE_LIBXINERAMA - feh_menu_add_toggle_entry(mm, "Use Xinerama", NULL, NULL, feh_menu_cb_opt_xinerama, NULL, NULL, opt.xinerama); -#endif /* HAVE_LIBXINERAMA */ - feh_menu_add_entry(mm, NULL, NULL, NULL, NULL, NULL, NULL); - feh_menu_add_toggle_entry(mm, "Draw Filename", NULL, NULL, - feh_menu_cb_opt_draw_filename, NULL, NULL, opt.draw_filename); - feh_menu_add_toggle_entry(mm, "Keep HTTP Files", NULL, NULL, - feh_menu_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; - D_RETURN(4, mm); - i = NULL; - data = NULL; + return(mm); } -static void feh_menu_func_free_options(feh_menu * m, void *data) +static void feh_menu_func_free_options(feh_menu * m) { - D_ENTER(4); feh_menu_free(m); - D_RETURN_(4); - data = NULL; -} - -static void feh_menu_cb_fit(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - winwidget_size_to_image(m->fehwin); - D_RETURN_(4); - data = NULL; -} - -static void feh_menu_cb_edit_rotate(feh_menu * m, feh_menu_item * i, void *data) -{ - D_ENTER(4); - feh_edit_inplace_orient(m->fehwin, (int) data); - D_RETURN_(4); -} - -static void feh_menu_cb_save_image(feh_menu * m, feh_menu_item * i, void *data) -{ - slideshow_save_image(m->fehwin); -} - -static void feh_menu_cb_save_filelist(feh_menu * m, feh_menu_item * i, void *data) -{ - feh_save_filelist(); -} - -static void feh_menu_cb_opt_draw_filename(feh_menu * m, feh_menu_item * i, void *data) -{ - MENU_ITEM_TOGGLE(i); - if (MENU_ITEM_IS_ON(i)) - opt.draw_filename = TRUE; - else - opt.draw_filename = FALSE; - winwidget_rerender_all(0, 1); -} - -static void feh_menu_cb_opt_keep_http(feh_menu * m, feh_menu_item * i, void *data) -{ - MENU_ITEM_TOGGLE(i); - if (MENU_ITEM_IS_ON(i)) - opt.keep_http = TRUE; - else - opt.keep_http = FALSE; -} - -static void feh_menu_cb_opt_freeze_window(feh_menu * m, feh_menu_item * i, void *data) -{ - MENU_ITEM_TOGGLE(i); - if (MENU_ITEM_IS_ON(i)) { - opt.geom_flags = (WidthValue | HeightValue); - opt.geom_w = m->fehwin->w; - opt.geom_h = m->fehwin->h; - } else { - opt.geom_flags = 0; - } -} - -static void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i, void *data) -{ - int curr_screen = 0; - - MENU_ITEM_TOGGLE(i); - if (MENU_ITEM_IS_ON(i)) - m->fehwin->full_screen = TRUE; - else - m->fehwin->full_screen = FALSE; - -#ifdef HAVE_LIBXINERAMA - if (opt.xinerama && xinerama_screens) { - 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, - xinerama_screens[i].width, xinerama_screens[i].height)) { - curr_screen = xinerama_screen = i; - break; - } - - } - } -#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_show(m->fehwin); - -#ifdef HAVE_LIBXINERAMA - /* if we have xinerama and we're using it, then full screen the window - * on the head that the window was active on */ - if (m->fehwin->full_screen == TRUE && opt.xinerama && xinerama_screens) { - xinerama_screen = curr_screen; - winwidget_move(m->fehwin, xinerama_screens[curr_screen].x_org, xinerama_screens[curr_screen].y_org); - } -#endif /* HAVE_LIBXINERAMA */ -} - -static void feh_menu_cb_opt_auto_zoom(feh_menu * m, feh_menu_item * i, void *data) -{ - MENU_ITEM_TOGGLE(i); - opt.auto_zoom = MENU_ITEM_IS_ON(i) ? 1 : 0; - winwidget_rerender_all(1, 1); + return; } - -#ifdef HAVE_LIBXINERAMA -static void feh_menu_cb_opt_xinerama(feh_menu * m, feh_menu_item * i, void *data) -{ - MENU_ITEM_TOGGLE(i); - opt.xinerama = MENU_ITEM_IS_ON(i) ? 1 : 0; - - if (opt.xinerama) { - init_xinerama(); - } else { - XFree(xinerama_screens); - xinerama_screens = NULL; - } - winwidget_rerender_all(1, 1); -} -#endif /* HAVE_LIBXINERAMA */ |