static int tree_event (Gpm_Event * event, void *data) { WTree *tree = (WTree *) data; Widget *w = WIDGET (data); Gpm_Event local; if (!mouse_global_in_widget (event, w)) return MOU_UNHANDLED; /* rest of the upper frame - call menu */ if (tree->is_panel && (event->type & GPM_DOWN) != 0 && event->y == WIDGET (w->owner)->y + 1) return MOU_UNHANDLED; local = mouse_get_local (event, w); if ((local.type & GPM_UP) == 0) return MOU_NORMAL; if (tree->is_panel) local.y--; local.y--; if (!tree->active) change_panel (); if (local.y < 0) { tree_move_backward (tree, tlines (tree) - 1); show_tree (tree); } else if (local.y >= tlines (tree)) { tree_move_forward (tree, tlines (tree) - 1); show_tree (tree); } else if ((local.type & (GPM_UP | GPM_DOUBLE)) == (GPM_UP | GPM_DOUBLE)) { if (tree->tree_shown[local.y] != NULL) { tree->selected_ptr = tree->tree_shown[local.y]; tree->topdiff = local.y; } tree_chdir_sel (tree); } return MOU_NORMAL; }
static int tree_event (Gpm_Event * event, void *data) { WTree *tree = (WTree *) data; Widget *w = (Widget *) data; Gpm_Event local; if (!mouse_global_in_widget (event, w)) return MOU_UNHANDLED; local = mouse_get_local (event, w); /* rest of the upper frame, the menu is invisible - call menu */ if (tree->is_panel && (local.type & GPM_DOWN) != 0 && local.y == 1 && !menubar_visible) return the_menubar->widget.mouse (event, the_menubar); if ((local.type & GPM_UP) == 0) return MOU_NORMAL; if (tree->is_panel) local.y--; local.y--; if (!tree->active) change_panel (); if (local.y < 0) { tree_move_backward (tree, tlines (tree) - 1); show_tree (tree); } else if (local.y >= tlines (tree)) { tree_move_forward (tree, tlines (tree) - 1); show_tree (tree); } else { tree_mouse_click (tree, local.y); if ((local.type & (GPM_UP | GPM_DOUBLE)) == (GPM_UP | GPM_DOUBLE)) tree_chdir_sel (tree); } return MOU_NORMAL; }
static cb_ret_t tree_execute_cmd (WTree * tree, long command) { cb_ret_t res = MSG_HANDLED; if (command != CK_Search) tree->searching = 0; switch (command) { case CK_Help: { ev_help_t event_data = { NULL, "[Directory Tree]" }; mc_event_raise (MCEVENT_GROUP_CORE, "help", &event_data); } break; case CK_Forget: tree_forget (tree); break; case CK_ToggleNavigation: tree_toggle_navig (tree); break; case CK_Copy: tree_copy (tree, ""); break; case CK_Move: tree_move (tree, ""); break; case CK_Up: tree_move_up (tree); break; case CK_Down: tree_move_down (tree); break; case CK_Top: tree_move_home (tree); break; case CK_Bottom: tree_move_end (tree); break; case CK_PageUp: tree_move_pgup (tree); break; case CK_PageDown: tree_move_pgdn (tree); break; case CK_Enter: tree_chdir_sel (tree); break; case CK_Reread: tree_rescan (tree); break; case CK_Search: tree_start_search (tree); break; case CK_Delete: tree_rmdir (tree); break; case CK_Quit: if (!tree->is_panel) dlg_stop (WIDGET (tree)->owner); return res; default: res = MSG_NOT_HANDLED; } show_tree (tree); return res; }
static void maybe_chdir (WTree * tree) { if (xtree_mode && tree->is_panel && is_idle ()) tree_chdir_sel (tree); }
/** * Mouse callback */ static void tree_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event) { WTree *tree = (WTree *) w; int y; y = event->y; if (tree->is_panel) y--; switch (msg) { case MSG_MOUSE_DOWN: /* rest of the upper frame - call menu */ if (tree->is_panel && event->y == WIDGET (w->owner)->y) { /* return MOU_UNHANDLED */ event->result.abort = TRUE; } else if (!widget_get_state (w, WST_FOCUSED)) change_panel (); break; case MSG_MOUSE_CLICK: { int lines; lines = tlines (tree); if (y < 0) { tree_move_backward (tree, lines - 1); show_tree (tree); } else if (y >= lines) { tree_move_forward (tree, lines - 1); show_tree (tree); } else if ((event->count & GPM_DOUBLE) != 0) { if (tree->tree_shown[y] != NULL) { tree->selected_ptr = tree->tree_shown[y]; tree->topdiff = y; } tree_chdir_sel (tree); } } break; case MSG_MOUSE_SCROLL_UP: case MSG_MOUSE_SCROLL_DOWN: /* TODO: Ticket #2218 */ break; default: break; } }