mirror of
https://github.com/hyprwm/Hypr.git
synced 2024-11-22 05:25:58 +01:00
some checks, todo fix randr
This commit is contained in:
parent
7b7ba35b0c
commit
5b551d13af
6 changed files with 56 additions and 10 deletions
|
@ -112,12 +112,6 @@ void KeybindManager::changeworkspace(std::string arg) {
|
||||||
Debug::log(LOG, "Changing the current workspace to " + std::to_string(ID));
|
Debug::log(LOG, "Changing the current workspace to " + std::to_string(ID));
|
||||||
|
|
||||||
const auto PLASTWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow);
|
const auto PLASTWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow);
|
||||||
SMonitor* MONITOR = nullptr;
|
|
||||||
if (PLASTWINDOW) {
|
|
||||||
MONITOR = g_pWindowManager->getMonitorFromWindow(PLASTWINDOW);
|
|
||||||
} else {
|
|
||||||
MONITOR = g_pWindowManager->getMonitorFromCursor();
|
|
||||||
}
|
|
||||||
|
|
||||||
g_pWindowManager->changeWorkspaceByID(ID);
|
g_pWindowManager->changeWorkspaceByID(ID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,8 +87,8 @@ void CStatusBar::setup(int MonitorID) {
|
||||||
|
|
||||||
|
|
||||||
// Set the bar to be top
|
// Set the bar to be top
|
||||||
values[0] = XCB_STACK_MODE_ABOVE;
|
//values[0] = XCB_STACK_MODE_ABOVE;
|
||||||
xcb_configure_window(g_pWindowManager->DisplayConnection, m_iWindowID, XCB_CONFIG_WINDOW_STACK_MODE, values);
|
//xcb_configure_window(g_pWindowManager->DisplayConnection, m_iWindowID, XCB_CONFIG_WINDOW_STACK_MODE, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CStatusBar::destroy() {
|
void CStatusBar::destroy() {
|
||||||
|
|
|
@ -27,4 +27,16 @@
|
||||||
|
|
||||||
#define STICKS(a, b) abs((a) - (b)) < 2
|
#define STICKS(a, b) abs((a) - (b)) < 2
|
||||||
|
|
||||||
#define VECINRECT(vec, x1, y1, x2, y2) (vec.x >= (x1) && vec.x <= (x2) && vec.y >= (y1) && vec.y <= (y2))
|
#define VECINRECT(vec, x1, y1, x2, y2) (vec.x >= (x1) && vec.x <= (x2) && vec.y >= (y1) && vec.y <= (y2))
|
||||||
|
|
||||||
|
#define XCBQUERYCHECK(name, query, errormsg) \
|
||||||
|
xcb_generic_error_t* error; \
|
||||||
|
const auto name = query; \
|
||||||
|
\
|
||||||
|
if (error != NULL) { \
|
||||||
|
Debug::log(ERR, errormsg); \
|
||||||
|
free(error); \
|
||||||
|
free(name); \
|
||||||
|
return; \
|
||||||
|
} \
|
||||||
|
free(error);
|
||||||
|
|
|
@ -53,6 +53,10 @@ CWindow* Events::remapWindow(int windowID, bool wasfloating) {
|
||||||
window.setDrawable(windowID);
|
window.setDrawable(windowID);
|
||||||
window.setIsFloating(false);
|
window.setIsFloating(false);
|
||||||
window.setDirty(true);
|
window.setDirty(true);
|
||||||
|
if (!g_pWindowManager->getMonitorFromCursor()) {
|
||||||
|
Debug::log(ERR, "Monitor was null! (remapWindow)");
|
||||||
|
// rip! we cannot continue.
|
||||||
|
}
|
||||||
const auto CURRENTSCREEN = g_pWindowManager->getMonitorFromCursor()->ID;
|
const auto CURRENTSCREEN = g_pWindowManager->getMonitorFromCursor()->ID;
|
||||||
window.setWorkspaceID(g_pWindowManager->activeWorkspaces[CURRENTSCREEN]);
|
window.setWorkspaceID(g_pWindowManager->activeWorkspaces[CURRENTSCREEN]);
|
||||||
window.setMonitor(CURRENTSCREEN);
|
window.setMonitor(CURRENTSCREEN);
|
||||||
|
|
|
@ -21,6 +21,11 @@ int main(int argc, char** argv) {
|
||||||
|
|
||||||
g_pWindowManager->Screen = xcb_setup_roots_iterator(xcb_get_setup(g_pWindowManager->DisplayConnection)).data;
|
g_pWindowManager->Screen = xcb_setup_roots_iterator(xcb_get_setup(g_pWindowManager->DisplayConnection)).data;
|
||||||
|
|
||||||
|
if (!g_pWindowManager->Screen) {
|
||||||
|
Debug::log(CRIT, "Screen was null!");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
g_pWindowManager->setupManager();
|
g_pWindowManager->setupManager();
|
||||||
|
|
||||||
Debug::log(LOG, "Hypr Started!");
|
Debug::log(LOG, "Hypr Started!");
|
||||||
|
|
|
@ -16,6 +16,18 @@ xcb_visualtype_t* CWindowManager::setupColors() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindowManager::setupRandrMonitors() {
|
void CWindowManager::setupRandrMonitors() {
|
||||||
|
|
||||||
|
// TODO: this stopped working on my machine for some reason.
|
||||||
|
// i3 works though...?
|
||||||
|
|
||||||
|
// finds 0 monitors
|
||||||
|
|
||||||
|
XCBQUERYCHECK(RANDRVER, xcb_randr_query_version_reply(
|
||||||
|
DisplayConnection, xcb_randr_query_version(DisplayConnection, XCB_RANDR_MAJOR_VERSION, XCB_RANDR_MINOR_VERSION), &error), "RandR query failed!" );
|
||||||
|
|
||||||
|
|
||||||
|
free(RANDRVER);
|
||||||
|
|
||||||
auto ScreenResReply = xcb_randr_get_screen_resources_current_reply(DisplayConnection, xcb_randr_get_screen_resources_current(DisplayConnection, Screen->root), NULL);
|
auto ScreenResReply = xcb_randr_get_screen_resources_current_reply(DisplayConnection, xcb_randr_get_screen_resources_current(DisplayConnection, Screen->root), NULL);
|
||||||
if (!ScreenResReply) {
|
if (!ScreenResReply) {
|
||||||
Debug::log(ERR, "ScreenResReply NULL!");
|
Debug::log(ERR, "ScreenResReply NULL!");
|
||||||
|
@ -65,6 +77,8 @@ void CWindowManager::setupRandrMonitors() {
|
||||||
//listen for screen change events
|
//listen for screen change events
|
||||||
xcb_randr_select_input(DisplayConnection, Screen->root, XCB_RANDR_NOTIFY_MASK_SCREEN_CHANGE);
|
xcb_randr_select_input(DisplayConnection, Screen->root, XCB_RANDR_NOTIFY_MASK_SCREEN_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xcb_flush(DisplayConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindowManager::setupManager() {
|
void CWindowManager::setupManager() {
|
||||||
|
@ -74,7 +88,7 @@ void CWindowManager::setupManager() {
|
||||||
// RandR failed!
|
// RandR failed!
|
||||||
Debug::log(WARN, "RandR failed!");
|
Debug::log(WARN, "RandR failed!");
|
||||||
|
|
||||||
#define TESTING_MON_AMOUNT 3
|
#define TESTING_MON_AMOUNT 1
|
||||||
for (int i = 0; i < TESTING_MON_AMOUNT /* Testing on 3 monitors, RandR shouldnt fail on a real desktop */; ++i) {
|
for (int i = 0; i < TESTING_MON_AMOUNT /* Testing on 3 monitors, RandR shouldnt fail on a real desktop */; ++i) {
|
||||||
monitors.push_back(SMonitor());
|
monitors.push_back(SMonitor());
|
||||||
monitors[i].vecPosition = Vector2D(i * Screen->width_in_pixels / TESTING_MON_AMOUNT, 0);
|
monitors[i].vecPosition = Vector2D(i * Screen->width_in_pixels / TESTING_MON_AMOUNT, 0);
|
||||||
|
@ -445,6 +459,11 @@ void CWindowManager::calculateNewTileSetOldTile(CWindow* pWindow) {
|
||||||
// New window on this workspace.
|
// New window on this workspace.
|
||||||
// Open a fullscreen window.
|
// Open a fullscreen window.
|
||||||
const auto MONITOR = getMonitorFromCursor();
|
const auto MONITOR = getMonitorFromCursor();
|
||||||
|
if (!MONITOR) {
|
||||||
|
Debug::log(ERR, "Monitor was nullptr! (calculateNewTileSetOldTile)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pWindow->setSize(Vector2D(MONITOR->vecSize.x, MONITOR->vecSize.y));
|
pWindow->setSize(Vector2D(MONITOR->vecSize.x, MONITOR->vecSize.y));
|
||||||
pWindow->setPosition(Vector2D(MONITOR->vecPosition.x, MONITOR->vecPosition.y));
|
pWindow->setPosition(Vector2D(MONITOR->vecPosition.x, MONITOR->vecPosition.y));
|
||||||
|
|
||||||
|
@ -678,6 +697,7 @@ void CWindowManager::warpCursorTo(Vector2D to) {
|
||||||
xcb_query_pointer_reply_t* pointerreply = xcb_query_pointer_reply(DisplayConnection, POINTERCOOKIE, NULL);
|
xcb_query_pointer_reply_t* pointerreply = xcb_query_pointer_reply(DisplayConnection, POINTERCOOKIE, NULL);
|
||||||
if (!pointerreply) {
|
if (!pointerreply) {
|
||||||
Debug::log(ERR, "Couldn't query pointer.");
|
Debug::log(ERR, "Couldn't query pointer.");
|
||||||
|
free(pointerreply);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -717,6 +737,11 @@ void CWindowManager::changeWorkspaceByID(int ID) {
|
||||||
|
|
||||||
const auto MONITOR = getMonitorFromCursor();
|
const auto MONITOR = getMonitorFromCursor();
|
||||||
|
|
||||||
|
if (!MONITOR) {
|
||||||
|
Debug::log(ERR, "Monitor was nullptr! (changeWorkspaceByID)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// mark old workspace dirty
|
// mark old workspace dirty
|
||||||
setAllWorkspaceWindowsDirtyByID(activeWorkspaces[MONITOR->ID]);
|
setAllWorkspaceWindowsDirtyByID(activeWorkspaces[MONITOR->ID]);
|
||||||
|
|
||||||
|
@ -816,6 +841,7 @@ Vector2D CWindowManager::getCursorPos() {
|
||||||
xcb_query_pointer_reply_t* pointerreply = xcb_query_pointer_reply(DisplayConnection, POINTERCOOKIE, NULL);
|
xcb_query_pointer_reply_t* pointerreply = xcb_query_pointer_reply(DisplayConnection, POINTERCOOKIE, NULL);
|
||||||
if (!pointerreply) {
|
if (!pointerreply) {
|
||||||
Debug::log(ERR, "Couldn't query pointer.");
|
Debug::log(ERR, "Couldn't query pointer.");
|
||||||
|
free(pointerreply);
|
||||||
return Vector2D(0,0);
|
return Vector2D(0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,5 +869,10 @@ void CWindowManager::updateBarInfo() {
|
||||||
|
|
||||||
std::sort(statusBar.openWorkspaces.begin(), statusBar.openWorkspaces.end());
|
std::sort(statusBar.openWorkspaces.begin(), statusBar.openWorkspaces.end());
|
||||||
|
|
||||||
|
if (!getMonitorFromCursor()) {
|
||||||
|
Debug::log(ERR, "Monitor was null! (updateBarInfo)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
statusBar.setCurrentWorkspace(activeWorkspaces[getMonitorFromCursor()->ID]);
|
statusBar.setCurrentWorkspace(activeWorkspaces[getMonitorFromCursor()->ID]);
|
||||||
}
|
}
|
Loading…
Reference in a new issue