📄 layout_util.c
字号:
/* * GQview * (C) 2004 John Ellis * * Author: John Ellis * * This software is released under the GNU General Public License (GNU GPL). * Please read the included file COPYING for more information. * This software comes with no warranty of any kind, use at your own risk! */#include "gqview.h"#include "layout_util.h"#include "bar_info.h"#include "bar_exif.h"#include "bar_sort.h"#include "cache_maint.h"#include "collect.h"#include "collect-dlg.h"#include "dupe.h"#include "editors.h"#include "info.h"#include "layout_image.h"#include "pan-view.h"#include "pixbuf_util.h"#include "preferences.h"#include "print.h"#include "search.h"#include "utilops.h"#include "ui_bookmark.h"#include "ui_fileops.h"#include "ui_menu.h"#include "ui_misc.h"#include "ui_tabcomp.h"#include <gdk/gdkkeysyms.h> /* for keyboard values */#define MENU_EDIT_ACTION_OFFSET 16/* *----------------------------------------------------------------------------- * keyboard handler *----------------------------------------------------------------------------- */static guint tree_key_overrides[] = { GDK_Page_Up, GDK_KP_Page_Up, GDK_Page_Down, GDK_KP_Page_Down, GDK_Home, GDK_KP_Home, GDK_End, GDK_KP_End};static gint layout_key_match(guint keyval){ gint i; for (i = 0; i < sizeof(tree_key_overrides) / sizeof(guint); i++) { if (keyval == tree_key_overrides[i]) return TRUE; } return FALSE;}static gint layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data){ LayoutWindow *lw = data; gint stop_signal = FALSE; gint x = 0; gint y = 0; if (lw->path_entry && GTK_WIDGET_HAS_FOCUS(lw->path_entry)) { if (event->keyval == GDK_Escape && lw->path) { gtk_entry_set_text(GTK_ENTRY(lw->path_entry), lw->path); } /* the gtkaccelgroup of the window is stealing presses before they get to the entry (and more), * so when the some widgets have focus, give them priority (HACK) */ if (gtk_widget_event(lw->path_entry, (GdkEvent *)event)) { return TRUE; } } if (lw->vdt && GTK_WIDGET_HAS_FOCUS(lw->vdt->treeview) && !layout_key_match(event->keyval) && gtk_widget_event(lw->vdt->treeview, (GdkEvent *)event)) { return TRUE; } if (lw->bar_info && bar_info_event(lw->bar_info, (GdkEvent *)event)) { return TRUE; } if (lw->image && (GTK_WIDGET_HAS_FOCUS(lw->image->widget) || (lw->tools && widget == lw->window)) ) { switch (event->keyval) { case GDK_Left: case GDK_KP_Left: x -= 1; stop_signal = TRUE; break; case GDK_Right: case GDK_KP_Right: x += 1; stop_signal = TRUE; break; case GDK_Up: case GDK_KP_Up: y -= 1; stop_signal = TRUE; break; case GDK_Down: case GDK_KP_Down: y += 1; stop_signal = TRUE; break; case GDK_BackSpace: case 'B': case 'b': layout_image_prev(lw); stop_signal = TRUE; break; case GDK_space: case 'N': case 'n': layout_image_next(lw); stop_signal = TRUE; break; case GDK_Menu: layout_image_menu_popup(lw); stop_signal = TRUE; break; } } if (!stop_signal && !(event->state & GDK_CONTROL_MASK) ) switch (event->keyval) { case '+': case GDK_KP_Add: layout_image_zoom_adjust(lw, get_zoom_increment()); stop_signal = TRUE; break; case GDK_KP_Subtract: layout_image_zoom_adjust(lw, -get_zoom_increment()); stop_signal = TRUE; break; case GDK_KP_Multiply: layout_image_zoom_set(lw, 0.0); stop_signal = TRUE; break; case GDK_KP_Divide: case '1': layout_image_zoom_set(lw, 1.0); stop_signal = TRUE; break; case '2': layout_image_zoom_set(lw, 2.0); stop_signal = TRUE; break; case '3': layout_image_zoom_set(lw, 3.0); stop_signal = TRUE; break; case '4': layout_image_zoom_set(lw, 4.0); stop_signal = TRUE; break; case '7': layout_image_zoom_set(lw, -4.0); stop_signal = TRUE; break; case '8': layout_image_zoom_set(lw, -3.0); stop_signal = TRUE; break; case '9': layout_image_zoom_set(lw, -2.0); stop_signal = TRUE; break; case 'W': case 'w': layout_image_zoom_set_fill_geometry(lw, FALSE); break; case 'H': case 'h': layout_image_zoom_set_fill_geometry(lw, TRUE); break; case GDK_Page_Up: case GDK_KP_Page_Up: layout_image_prev(lw); stop_signal = TRUE; break; case GDK_Page_Down: case GDK_KP_Page_Down: layout_image_next(lw); stop_signal = TRUE; break; case GDK_Home: case GDK_KP_Home: layout_image_first(lw); stop_signal = TRUE; break; case GDK_End: case GDK_KP_End: layout_image_last(lw); stop_signal = TRUE; break; case GDK_Delete: case GDK_KP_Delete: if (enable_delete_key) { file_util_delete(NULL, layout_selection_list(lw), widget); stop_signal = TRUE; } break; case GDK_Escape: /* FIXME:interrupting thumbs no longer allowed */#if 0 interrupt_thumbs();#endif stop_signal = TRUE; break; case 'P': case 'p': layout_image_slideshow_pause_toggle(lw); break; case 'V': case 'v': if (!(event->state & GDK_MOD1_MASK)) layout_image_full_screen_toggle(lw); break; } if (event->state & GDK_SHIFT_MASK) { x *= 3; y *= 3; } if (x != 0 || y!= 0) { keyboard_scroll_calc(&x, &y, event); layout_image_scroll(lw, x, y); } if (stop_signal) g_signal_stop_emission_by_name(G_OBJECT(widget), "key_press_event"); return stop_signal;}void layout_keyboard_init(LayoutWindow *lw, GtkWidget *window){ g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(layout_key_press_cb), lw);}/* *----------------------------------------------------------------------------- * menu callbacks *----------------------------------------------------------------------------- */static void layout_menu_new_window_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; LayoutWindow *nw; nw = layout_new(NULL, FALSE, FALSE); layout_sort_set(nw, file_sort_method, file_sort_ascending); layout_set_path(nw, layout_get_path(lw));}static void layout_menu_new_cb(GtkAction *action, gpointer data){ collection_window_new(NULL);}static void layout_menu_open_cb(GtkAction *action, gpointer data){ collection_dialog_load(NULL);}static void layout_menu_search_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; search_new(lw->path, layout_image_get_path(lw));}static void layout_menu_dupes_cb(GtkAction *action, gpointer data){ dupe_window_new(DUPE_MATCH_NAME);}static void layout_menu_pan_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; pan_window_new(layout_get_path(lw));}static void layout_menu_print_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; print_window_new(layout_image_get_path(lw), layout_selection_list(lw), layout_list(lw), lw->window);}static void layout_menu_dir_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; file_util_create_dir(lw->path, lw->window);}static void layout_menu_copy_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; file_util_copy(NULL, layout_selection_list(lw), NULL, lw->window);}static void layout_menu_move_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; file_util_move(NULL, layout_selection_list(lw), NULL, lw->window);}static void layout_menu_rename_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; file_util_rename(NULL, layout_selection_list(lw), lw->window);}static void layout_menu_delete_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; file_util_delete(NULL, layout_selection_list(lw), lw->window);}static void layout_menu_close_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_close(lw);}static void layout_menu_exit_cb(GtkAction *action, gpointer data){ exit_gqview();}static void layout_menu_alter_90_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_alter(lw, ALTER_ROTATE_90);}static void layout_menu_alter_90cc_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_alter(lw, ALTER_ROTATE_90_CC);}static void layout_menu_alter_180_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_alter(lw, ALTER_ROTATE_180);}static void layout_menu_alter_mirror_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_alter(lw, ALTER_MIRROR);}static void layout_menu_alter_flip_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_alter(lw, ALTER_FLIP);}static void layout_menu_info_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; GList *list; const gchar *path = NULL; list = layout_selection_list(lw); if (!list) path = layout_image_get_path(lw); info_window_new(path, list);}static void layout_menu_select_all_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_select_all(lw);}static void layout_menu_unselect_all_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_select_none(lw);}static void layout_menu_config_cb(GtkAction *action, gpointer data){ show_config_window();}static void layout_menu_remove_thumb_cb(GtkAction *action, gpointer data){ cache_manager_show();}static void layout_menu_wallpaper_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_to_root(lw);}static void layout_menu_zoom_in_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_zoom_adjust(lw, get_zoom_increment());}static void layout_menu_zoom_out_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_zoom_adjust(lw, -get_zoom_increment());}static void layout_menu_zoom_1_1_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_zoom_set(lw, 1.0);}static void layout_menu_zoom_fit_cb(GtkAction *action, gpointer data){ LayoutWindow *lw = data; layout_image_zoom_set(lw, 0.0);}static void layout_menu_thumb_cb(GtkToggleAction *action, gpointer data){ LayoutWindow *lw = data; layout_thumb_set(lw, gtk_toggle_action_get_active(action));}static void layout_menu_list_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data){ LayoutWindow *lw = data; layout_views_set(lw, lw->tree_view, (gtk_radio_action_get_current_value(action) == 1));}static void layout_menu_tree_cb(GtkToggleAction *action, gpointer data){ LayoutWindow *lw = data; layout_views_set(lw, gtk_toggle_action_get_active(action), lw->icon_view);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -