static void scroll_cb(ImageWindow *imd, GdkEventScroll *event, gpointer data) { ViewWindow *vw = data; if (event->state & GDK_CONTROL_MASK) { switch (event->direction) { case GDK_SCROLL_UP: image_zoom_adjust_at_point(imd, get_zoom_increment(), event->x, event->y); break; case GDK_SCROLL_DOWN: image_zoom_adjust_at_point(imd, -get_zoom_increment(), event->x, event->y); break; default: break; } } else if ( (event->state & GDK_SHIFT_MASK) != (guint) (options->mousewheel_scrolls)) { switch (event->direction) { case GDK_SCROLL_UP: image_scroll(imd, 0, -MOUSEWHEEL_SCROLL_SIZE); break; case GDK_SCROLL_DOWN: image_scroll(imd, 0, MOUSEWHEEL_SCROLL_SIZE); break; case GDK_SCROLL_LEFT: image_scroll(imd, -MOUSEWHEEL_SCROLL_SIZE, 0); break; case GDK_SCROLL_RIGHT: image_scroll(imd, MOUSEWHEEL_SCROLL_SIZE, 0); break; default: break; } } else { switch (event->direction) { case GDK_SCROLL_UP: view_step_prev(vw); break; case GDK_SCROLL_DOWN: view_step_next(vw); break; default: break; } } }
static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition, gpointer data) { LayoutWindow *lw = data; gchar *ptr; gint ret; gint x = 0; gint y = 0; /* LIRC code and corresponding geeqie command (and parameters)*/ gchar *code; gchar *cmd; /* parameters for geeqie command */ gint i_parm; gfloat fl_parm; while ((ret = lirc_nextcode(&code)) == 0 && code) { while ((ret = lirc_code2char(config, code, &cmd)) == 0 && cmd) { if (g_ascii_strncasecmp("LEFT", cmd, 4) == 0) { ptr = cmd + 4; while (g_ascii_isspace(*ptr)) ptr++; i_parm = atoi(ptr); if (i_parm <= 0) i_parm = 1; x -= i_parm; } else if (g_ascii_strncasecmp("RIGHT", cmd, 5) == 0) { ptr = cmd + 5; while (g_ascii_isspace(*ptr)) ptr++; i_parm = atoi(ptr); if (i_parm <= 0) i_parm = 1; x += i_parm; } else if (g_ascii_strncasecmp("UP", cmd, 2) == 0) { ptr = cmd + 2; while (g_ascii_isspace(*ptr)) ptr++; i_parm = atoi(ptr); if (i_parm <= 0) i_parm = 1; y -= i_parm; } else if (g_ascii_strncasecmp("DOWN", cmd, 4) == 0) { ptr = cmd + 4; while (g_ascii_isspace(*ptr)) ptr++; i_parm = atoi(ptr); if (i_parm <= 0) i_parm = 1; y += i_parm; } else if (g_ascii_strcasecmp("PREV", cmd) == 0) { layout_image_prev(lw); } else if (g_ascii_strcasecmp("NEXT", cmd) == 0) { layout_image_next(lw); } else if (g_ascii_strncasecmp("ZOOM_IN", cmd, 7) == 0) { ptr = cmd + 7; while (g_ascii_isspace(*ptr)) ptr++; fl_parm = atoi(ptr) / 10.0; if (fl_parm <= 0.01) fl_parm = get_zoom_increment(); layout_image_zoom_adjust(lw, fl_parm, FALSE); } else if (g_ascii_strncasecmp("ZOOM_OUT", cmd, 8) == 0) { ptr = cmd + 8; while (g_ascii_isspace(*ptr)) ptr++; fl_parm = atoi(ptr) / 10.0; if (fl_parm <= 0.01) fl_parm = get_zoom_increment(); layout_image_zoom_adjust(lw, -fl_parm, FALSE); } else if (g_ascii_strcasecmp("ZOOM_MAX", cmd) == 0) { layout_image_zoom_set(lw, 0.0, FALSE); } else if (g_ascii_strcasecmp("FULL_SCREEN", cmd) == 0) { layout_image_full_screen_toggle(lw); } else if (g_ascii_strncasecmp("SET_ZOOM", cmd, 8) == 0) { ptr = cmd + 8; while (g_ascii_isspace(*ptr)) ptr++; i_parm = atoi(ptr); if (i_parm <= 0) i_parm = 1; layout_image_zoom_set(lw, 1.0, FALSE); } else if (g_ascii_strncasecmp("SET_INV_ZOOM", cmd, 12) == 0) { ptr = cmd + 12; while (g_ascii_isspace(*ptr)) ptr++; i_parm = atoi(ptr); if (i_parm <= 0) i_parm = 1; layout_image_zoom_set(lw, -i_parm, FALSE); } else if (g_ascii_strcasecmp("FIRST", cmd) == 0) { layout_image_first(lw); } else if (g_ascii_strcasecmp("LAST", cmd) == 0) { layout_image_last(lw); } else if (g_ascii_strcasecmp("PAUSE", cmd) == 0) { layout_image_slideshow_pause_toggle(lw); } else if (g_ascii_strcasecmp("ROTATE_90", cmd) == 0) { layout_image_alter_orientation(lw, ALTER_ROTATE_90); } else if (g_ascii_strcasecmp("ROTATE_90_CC", cmd) == 0) { layout_image_alter_orientation(lw, ALTER_ROTATE_90_CC); } else if (g_ascii_strcasecmp("INFO", cmd) == 0) { layout_image_overlay_toggle(lw); } else if (g_ascii_strcasecmp("EXIT", cmd) == 0) { exit_program(); } } free(code); if (ret == -1) break; } if (x != 0 || y != 0) { layout_image_scroll(lw, x, y, FALSE); } if (ret == -1) { /* something went badly wrong */ g_fprintf(stderr, _("disconnected from LIRC\n")); lirc_cleanup(); return (gboolean)FALSE; } return (gboolean)TRUE; }
static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) { ViewWindow *vw = data; ImageWindow *imd; gint stop_signal; GtkWidget *menu; gint x = 0; gint y = 0; imd = view_window_active_image(vw); stop_signal = TRUE; switch (event->keyval) { case GDK_KEY_Left: case GDK_KEY_KP_Left: x -= 1; break; case GDK_KEY_Right: case GDK_KEY_KP_Right: x += 1; break; case GDK_KEY_Up: case GDK_KEY_KP_Up: y -= 1; break; case GDK_KEY_Down: case GDK_KEY_KP_Down: y += 1; break; default: stop_signal = FALSE; break; } if (x != 0 || y!= 0) { if (event->state & GDK_SHIFT_MASK) { x *= 3; y *= 3; } keyboard_scroll_calc(&x, &y, event); image_scroll(imd, x, y); } if (stop_signal) return stop_signal; if (event->state & GDK_CONTROL_MASK) { stop_signal = TRUE; switch (event->keyval) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': break; case 'C': case 'c': file_util_copy(image_get_fd(imd), NULL, NULL, imd->widget); break; case 'M': case 'm': file_util_move(image_get_fd(imd), NULL, NULL, imd->widget); break; case 'R': case 'r': file_util_rename(image_get_fd(imd), NULL, imd->widget); break; case 'D': case 'd': file_util_delete(image_get_fd(imd), NULL, imd->widget); break; case 'W': case 'w': view_window_close(vw); break; default: stop_signal = FALSE; break; } } else if (event->state & GDK_SHIFT_MASK) { stop_signal = TRUE; switch (event->keyval) { case 'R': case 'r': image_alter_orientation(imd, ALTER_ROTATE_180); break; case 'M': case 'm': image_alter_orientation(imd, ALTER_MIRROR); break; case 'F': case 'f': image_alter_orientation(imd, ALTER_FLIP); break; case 'G': case 'g': image_set_desaturate(imd, !image_get_desaturate(imd)); break; case 'P': case 'p': { FileData *fd; view_fullscreen_toggle(vw, TRUE); imd = view_window_active_image(vw); fd = image_get_fd(imd); print_window_new(fd, fd ? g_list_append(NULL, file_data_ref(fd)) : NULL, filelist_copy(vw->list), vw->window); } break; default: stop_signal = FALSE; break; } } else { stop_signal = TRUE; switch (event->keyval) { case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up: case GDK_KEY_BackSpace: case 'B': case 'b': view_step_prev(vw); break; case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down: case GDK_KEY_space: case 'N': case 'n': view_step_next(vw); break; case GDK_KEY_Home: case GDK_KEY_KP_Home: view_step_to_end(vw, FALSE); break; case GDK_KEY_End: case GDK_KEY_KP_End: view_step_to_end(vw, TRUE); break; case '+': case '=': case GDK_KEY_KP_Add: image_zoom_adjust(imd, get_zoom_increment()); break; case '-': case GDK_KEY_KP_Subtract: image_zoom_adjust(imd, -get_zoom_increment()); break; case 'X': case 'x': case GDK_KEY_KP_Multiply: image_zoom_set(imd, 0.0); break; case 'Z': case 'z': case GDK_KEY_KP_Divide: case '1': image_zoom_set(imd, 1.0); break; case '2': image_zoom_set(imd, 2.0); break; case '3': image_zoom_set(imd, 3.0); break; case '4': image_zoom_set(imd, 4.0); break; case '7': image_zoom_set(imd, -4.0); break; case '8': image_zoom_set(imd, -3.0); break; case '9': image_zoom_set(imd, -2.0); break; case 'W': case 'w': image_zoom_set_fill_geometry(imd, FALSE); break; case 'H': case 'h': image_zoom_set_fill_geometry(imd, TRUE); break; case 'R': case 'r': image_reload(imd); break; case 'S': case 's': if (vw->ss) { view_slideshow_stop(vw); } else { view_slideshow_start(vw); } break; case 'P': case 'p': slideshow_pause_toggle(vw->ss); break; case 'F': case 'f': case 'V': case 'v': case GDK_KEY_F11: view_fullscreen_toggle(vw, FALSE); break; case 'I': case 'i': view_overlay_toggle(vw); break; case ']': image_alter_orientation(imd, ALTER_ROTATE_90); break; case '[': image_alter_orientation(imd, ALTER_ROTATE_90_CC); break; case GDK_KEY_Delete: case GDK_KEY_KP_Delete: if (options->file_ops.enable_delete_key) { file_util_delete(image_get_fd(imd), NULL, imd->widget); } break; case GDK_KEY_Escape: if (vw->fs) { view_fullscreen_toggle(vw, TRUE); } else { view_window_close(vw); } break; case GDK_KEY_Menu: case GDK_KEY_F10: menu = view_popup_menu(vw); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, view_window_menu_pos_cb, vw, 0, GDK_CURRENT_TIME); break; default: stop_signal = FALSE; break; } } return stop_signal; }
static void view_zoom_out_cb(GtkWidget *widget, gpointer data) { ViewWindow *vw = data; image_zoom_adjust(view_window_active_image(vw), -get_zoom_increment()); }