/* * filter grabbed hotkeys */ GdkFilterReturn global_keys_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) { XEvent *xevent = (XEvent *)gdk_xevent; begin_func("global_keys_filter"); if (xevent->type == KeyPress) { if (xevent->xkey.keycode == XKeysymToKeycode(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), menukey) && xevent->xkey.state & menukey_mask) { /* popup history menu */ gtk_menu_popup(GTK_MENU(menu_hist), NULL, NULL, NULL, NULL, 0, GDK_CURRENT_TIME); return_val(GDK_FILTER_REMOVE); } else if (xevent->xkey.keycode == XKeysymToKeycode(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), prev_item_key) && xevent->xkey.state & prev_item_mask) { /* switch first two history items */ GList *second; if (history_items == NULL) { return_val(GDK_FILTER_REMOVE); } second = g_list_first(history_items)->next; if (second == NULL) { return_val(GDK_FILTER_REMOVE); } move_item_to_begin((HISTORY_ITEM *) second->data); return_val(GDK_FILTER_REMOVE); } else if (xevent->xkey.keycode == XKeysymToKeycode(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), exec_item_key) && xevent->xkey.state & exec_item_mask) { /* exec command on current item */ if (exec_hotkey) { HISTORY_ITEM *hist_item; hist_item = (HISTORY_ITEM *) g_list_first(history_items)->data; exec_item(hist_item->content, NULL); } return_val(GDK_FILTER_REMOVE); } } return_val(GDK_FILTER_CONTINUE); }
LRESULT menu_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_INITMENUPOPUP: { HMENU hmenu = (HMENU)wparam; struct menu_item* item; MENUINFO mi; mi.cbSize = sizeof(mi); mi.fMask = MIM_MENUDATA; GetMenuInfo(hmenu, &mi); item = (struct menu_item*)mi.dwMenuData; if (item) fill_menu(item); return 0; } break; case WM_MENUCOMMAND: { HMENU hmenu = (HMENU)lparam; struct menu_item* item; MENUITEMINFOW mii; mii.cbSize = sizeof(mii); mii.fMask = MIIM_DATA|MIIM_ID; GetMenuItemInfoW(hmenu, wparam, TRUE, &mii); item = (struct menu_item*)mii.dwItemData; if (item) exec_item(item); else if (mii.wID == MENU_ID_RUN) run_dialog(); destroy_menus(); return 0; } } return DefWindowProcW(hwnd, msg, wparam, lparam); }