bool CTablePositioner::TryPosition(int left_x, int top_y) { write_log(preferences.debug_table_positioner(), "[CTablePositioner] TryPosition() Trying position %i, %i\n", left_x, top_y); for (int i=0; i<_number_of_tables; i++) { HWND potential_neighbour_window = HWNDs_of_child_windows[i]; if (potential_neighbour_window == p_autoconnector->attached_hwnd()) { // Our window to be aligned is also in the list. // Don't try to align the window to itself. continue; } if (PotentialNewPositionOverlapsTable(left_x, top_y, potential_neighbour_window)) { write_log(preferences.debug_table_positioner(), "[CTablePositioner] TryPosition() Candidate-position overlaps table\n"); return false; } } // We have found a good position that does not overlap any other table // Move our connected table over there. _new_left_x = left_x; _new_top_y = top_y; write_log(preferences.debug_table_positioner(), "[CTablePositioner] TryPosition() Found a free slot\n"); write_log(preferences.debug_table_positioner(), "[CTablePositioner] TryPosition() Going to move the table to %i, %i\n", _new_left_x, _new_top_y); MoveWindowToItsPosition(); return true; }
void CTablePositioner::MoveToTopLeft() { write_log(preferences.debug_table_positioner(), "[CTablePositioner] MoveToTopLeft()\n"); _new_left_x = 0; _new_top_y = 0; MoveWindowToItsPosition(); }
void CTablePositioner::MoveToBottomRight() { write_log(preferences.debug_table_positioner(), "[CTablePositioner] MoveToBottomRight()\n"); _new_left_x = _desktop_rectangle.right - _table_size_x + 1; _new_top_y = _desktop_rectangle.bottom - _table_size_y + 1; MoveWindowToItsPosition(); }
// To be called once per heartbeat void CTablePositioner::AlwaysKeepPositionIfEnabled() { if (!preferences.table_positioner_always_keep_position() || (p_autoconnector->attached_hwnd() == NULL)) { write_log(preferences.debug_table_positioner(), "[CTablePositioner] AlwaysKeepPositionIfEnabled() disabled or not connected\n"); return; } RECT current_position; GetWindowRect(p_autoconnector->attached_hwnd(), ¤t_position); if ((current_position.left == _new_left_x) && (current_position.top == _new_top_y)) { write_log(preferences.debug_table_positioner(), "[CTablePositioner] AlwaysKeepPositionIfEnabled() position is good\n"); } else { write_log(preferences.debug_table_positioner(), "[CTablePositioner] AlwaysKeepPositionIfEnabled() restoring old position\n"); MoveWindowToItsPosition(); } }