void cb_mouse_button(GLFWwindow* window, int b, int action, int mods) { if(action != 1) return; double x, y; glfwGetCursorPos(window, &x, &y); sc2fb(window, &x, &y); if(b == 0) { duc_dir *dir2 = duc_graph_find_spot(graph, dir, x, y, NULL); if(dir2) { duc_dir_close(dir); dir = dir2; } } if(b == 3) { duc_dir *dir2 = duc_dir_openat(dir, ".."); if(dir2) { duc_dir_close(dir); dir = dir2; } } }
static int handle_event(XEvent e) { KeySym k; int x, y, b; switch(e.type) { case ConfigureNotify: win_w = e.xconfigure.width; win_h = e.xconfigure.height; cairo_xlib_surface_set_size(cs, win_w, win_h); redraw = 1; break; case Expose: if(e.xexpose.count < 1) redraw = 1; break; case KeyPress: k = XLookupKeysym(&e.xkey, 0); if(k == XK_minus) opt_levels--; if(k == XK_equal) opt_levels++; if(k == XK_0) opt_levels = 4; if(k == XK_Escape) return 1; if(k == XK_q) return 1; if(k == XK_a) opt_apparent = !opt_apparent; if(k == XK_b) opt_bytes = !opt_bytes; if(k == XK_f) fuzz = (fuzz == 0) ? opt_fuzz : 0; if(k == XK_comma) if(opt_ring_gap > 0) opt_ring_gap --; if(k == XK_period) opt_ring_gap ++; if(k == XK_p) { palette = (palette + 1) % 4; } if(k == XK_BackSpace) { duc_dir *dir2 = duc_dir_openat(dir, ".."); if(dir2) { duc_dir_close(dir); dir = dir2; } } redraw = 1; break; case ButtonPress: x = e.xbutton.x; y = e.xbutton.y; b = e.xbutton.button; if(b == 1) { duc_dir *dir2 = duc_graph_find_spot(graph, dir, x, y, NULL); if(dir2) { duc_dir_close(dir); dir = dir2; } } if(b == 3) { duc_dir *dir2 = duc_dir_openat(dir, ".."); if(dir2) { duc_dir_close(dir); dir = dir2; } } if(b == 4) opt_levels --; if(b == 5) opt_levels ++; redraw = 1; break; case MotionNotify: tooltip_x = e.xmotion.x; tooltip_y = e.xmotion.y; tooltip_moved = 1; break; default: break; } return 0; }