DBCursorPriv *DBPrivOpenCursor(DBPriv *db) { if (!LockCursor(db)) { return NULL; } if (!Lock(db)) { UnlockCursor(db); return NULL; } if (!dpiterinit(db->depot)) { Log(LOG_LEVEL_ERR, "Could not initialize QuickDB iterator. (dpiterinit: %s)", dperrmsg(dpecode)); Unlock(db); UnlockCursor(db); return NULL; } DBCursorPriv *cursor = xcalloc(1, sizeof(DBCursorPriv)); cursor->db = db; Unlock(db); /* Cursor remains locked */ return cursor; }
/* * This one has to be locked against cursor -- deleting entries might interrupt * iteration. */ bool DBPrivDelete(DBPriv *db, const void *key, int key_size) { if (!LockCursor(db)) { return false; } int ret = Delete(db->hdb, key, key_size); UnlockCursor(db); return ret; }
void DBPrivCloseCursor(DBCursorPriv *cursor) { DBPriv *db = cursor->db; /* FIXME: communicate the deadlock if happens */ Lock(db); free(cursor->curkey); free(cursor->curval); free(cursor); Unlock(db); /* Cursor lock was obtained in DBPrivOpenCursor */ UnlockCursor(db); }
void DBPrivCloseCursor(DBCursorPriv *cursor) { DBPriv *db = cursor->db; if (cursor->pending_delete) { Delete(db->hdb, cursor->current_key, cursor->current_key_size); } free(cursor->current_key); free(cursor); /* Cursor lock was obtained in DBPrivOpenCursor */ UnlockCursor(db); }
void Chkdraft::KeyListener(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch ( msg ) { case WM_KEYDOWN: { switch ( wParam ) { case VK_SPACE: CM->LockCursor(); return; break; case VK_DELETE: CM->deleteSelection(); return; break; case VK_ESCAPE: maps.endPaste(); return; break; case VK_RETURN: CM->ReturnKeyPress(); return; break; } if ( GetKeyState(VK_CONTROL) & 0x8000 ) // Control is down { if ( GetKeyState(VK_SHIFT) & 0x8000 ) // Shift is down { switch ( wParam ) { case 'S': maps.SaveCurr(true); return; break; } } else // Only control { switch ( wParam ) { case 'A': case 'C': case 'X': case 'V': { switch ( wParam ) { case 'A': CM->selectAll(); return; break; case 'C': maps.copy(); return; break; case 'X': maps.cut(); return; break; case 'V': maps.startPaste(false); return; break; } } break; case 'D': maps.ChangeLayer(Layer::Doodads); return; break; case 'E': FindLeaks(); return; break; case 'F': maps.ChangeLayer(Layer::FogEdit); return; break; case 'L': maps.ChangeLayer(Layer::Locations);return; break; case 'N': newMap.CreateThis(getHandle()); return; break; case 'O': maps.OpenMap(); return; break; case 'R': maps.ChangeLayer(Layer::Sprites); return; break; case 'S': maps.SaveCurr(false); return; break; case 'T': maps.ChangeLayer(Layer::Terrain); return; break; case 'U': maps.ChangeLayer(Layer::Units); return; break; case 'Y': CM->redo(); return; break; case 'Z': CM->undo(); return; break; case VK_OEM_PLUS: maps.ChangeZoom(true); return; break; case VK_OEM_MINUS: maps.ChangeZoom(false); return; break; case VK_F4: maps.CloseActive(); return; break; case VK_F6: maps.nextMdi(); return; break; } } } } break; case WM_SYSKEYDOWN: // Sent insted of WM_KEYUP when alt is pressed { switch ( wParam ) { case 'U': maps.SetGrid(8, 8); return; break; case 'F': maps.SetGrid(16, 16); return; break; case 'G': maps.SetGrid(32, 32); return; break; case 'L': maps.SetGrid(64, 64); return; break; case 'E': maps.SetGrid(128, 128); return; break; } } break; case WM_KEYUP: { switch ( wParam ) { case VK_SPACE: if ( !maps.clipboard.isPasting() ) UnlockCursor(); return; break; } } break; } if ( CM && editFocused == false && GetActiveWindow() == getHandle() ) { Layer layer = CM->getLayer(); if ( layer == Layer::Units || layer == Layer::FogEdit || layer == Layer::Sprites ) { u8 newPlayer; switch ( wParam ) { case '1': newPlayer = 0 ; break; case '2': newPlayer = 1 ; break; case '3': newPlayer = 2 ; break; case '4': newPlayer = 3 ; break; case '5': newPlayer = 4 ; break; case '6': newPlayer = 5 ; break; case '7': newPlayer = 6 ; break; case '8': newPlayer = 7 ; break; case '9': newPlayer = 8 ; break; case '0': newPlayer = 9 ; break; case '-': newPlayer = 10; break; case '=': newPlayer = 11; break; default: return; break; } mainToolbar.playerBox.SetSel(newPlayer); maps.ChangePlayer(newPlayer); } } }
bool Chkdraft::DlgKeyListener(HWND hWnd, UINT &msg, WPARAM wParam, LPARAM lParam) { switch ( msg ) { case WM_KEYDOWN: { switch ( wParam ) { case VK_TAB: if ( GetParent(GetParent(hWnd)) == trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.getHandle() || GetParent(hWnd) == trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.getHandle() ) { msg = WM_NULL; // Dirty fix to prevent tabs from being focused trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.ProcessKeyDown(wParam, lParam); return true; } else if ( GetParent(GetParent(hWnd)) == trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.getHandle() || GetParent(hWnd) == trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.getHandle() ) { msg = WM_NULL; // Dirty fix to prevent tabs from being focused trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.ProcessKeyDown(wParam, lParam); return true; } break; case VK_RETURN: if ( GetParent(GetParent(hWnd)) == trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.getHandle() || GetParent(hWnd) == trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.getHandle() ) { trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.ProcessKeyDown(wParam, lParam); return true; } else if ( GetParent(GetParent(hWnd)) == trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.getHandle() || GetParent(hWnd) == trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.getHandle() ) { trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.ProcessKeyDown(wParam, lParam); return true; } if ( GetParent(hWnd) == unitWindow.getHandle() ) { unitWindow.DestroyThis(); return true; } else if ( GetParent(hWnd) == locationWindow.getHandle() ) { locationWindow.DestroyThis(); return true; } else if ( GetParent(hWnd) == enterPasswordWindow.getHandle()) { enterPasswordWindow.ButtonLogin(); return true; } break; case VK_DELETE: if ( GetParent(hWnd) == unitWindow.getHandle() ) { SendMessage(unitWindow.getHandle(), WM_COMMAND, MAKEWPARAM(IDC_BUTTON_DELETE, 0), 0); return true; } break; case 'Z': case 'Y': case 'X': case 'C': case 'V': if ( GetKeyState(VK_CONTROL) & 0x8000 ) { KeyListener(hWnd, msg, wParam, lParam); return true; } break; } } break; case WM_KEYUP: if ( wParam == VK_SPACE && CM != nullptr && maps.clipboard.isPasting() ) { UnlockCursor(); return true; } break; } return false; }