Skip to content
Snippets Groups Projects
menu.c 58.3 KiB
Newer Older
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];

    /* FIXME: this doesn't do what it should;  XGetGeometry always
     * returns x,y == 0,0.  I think that's due to the hints being passed
     * (or more specifically, a missing hint) to X in winwidget_create
     */
    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);
}

#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 */