handle buttons

This commit is contained in:
vaxerski 2022-03-18 20:42:49 +01:00
parent d086fa3faa
commit 00098aef4f
5 changed files with 37 additions and 6 deletions

View File

@ -64,6 +64,8 @@ CCompositor::CCompositor() {
m_sWLRPresentation = wlr_presentation_create(m_sWLDisplay, m_sWLRBackend);
m_sWLRIdle = wlr_idle_create(m_sWLDisplay);
// TODO: XWayland
}

View File

@ -191,7 +191,7 @@ void Events::listener_mouseAxis(wl_listener* listener, void* data) {
}
void Events::listener_mouseButton(wl_listener* listener, void* data) {
g_pInputManager->onMouseButton((wlr_event_pointer_button*)data);
}
void Events::listener_keyboardDestroy(wl_listener* listener, void* data) {

View File

@ -14,10 +14,36 @@ void CInputManager::onMouseMoved(wlr_event_pointer_motion* e) {
wlr_cursor_move(g_pCompositor->m_sWLRCursor, e->device, delta.floor().x, delta.floor().y);
}
if (e->time_msec)
wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sWLRSeat);
// todo: focus
// todo: pointer
}
void CInputManager::onMouseWarp(wlr_event_pointer_motion_absolute* e) {
wlr_cursor_warp_absolute(g_pCompositor->m_sWLRCursor, e->device, e->x, e->y);
if (e->time_msec)
wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sWLRSeat);
}
void CInputManager::onMouseButton(wlr_event_pointer_button* e) {
wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sWLRSeat);
switch (e->state) {
case WLR_BUTTON_PRESSED:
// todo: keybinds
break;
case WLR_BUTTON_RELEASED:
// todo: keybinds
break;
}
// notify app if we didnt handle it
wlr_seat_pointer_notify_button(g_pCompositor->m_sWLRSeat, e->time_msec, e->button, e->state);
}
Vector2D CInputManager::getMouseCoordsInternal() {

View File

@ -9,6 +9,7 @@ public:
void onMouseMoved(wlr_event_pointer_motion*);
void onMouseWarp(wlr_event_pointer_motion_absolute*);
void onMouseButton(wlr_event_pointer_button*);
void onKeyboardKey(wlr_event_keyboard_key*);
void onKeyboardMod(void*);

View File

@ -43,18 +43,17 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
if (w.m_bIsX11)
continue;
const wlr_box geom = { w.m_vPosition.x, w.m_vPosition.y, w.m_vSize.x, w.m_vSize.y };
wlr_box geometry = { w.m_vPosition.x, w.m_vPosition.y, w.m_vSize.x, w.m_vSize.y };
if (!wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, PMONITOR->output, &geom))
if (!wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, PMONITOR->output, &geometry))
continue;
// render the bad boy
wlr_output_layout_output_coords(g_pCompositor->m_sWLROutputLayout, PMONITOR->output, &w.m_vPosition.x, &w.m_vPosition.y);
SRenderData renderdata = {PMONITOR->output, time, w.m_vSize.x, w.m_vSize.y};
wlr_surface_for_each_surface(w.m_uSurface.xdg->surface, renderSurface, &renderdata);
wlr_surface_for_each_surface(g_pXWaylandManager->getWindowSurface(&w), renderSurface, &renderdata);
wlr_xdg_surface_for_each_popup_surface(w.m_uSurface.xdg, renderSurface, &renderdata);
}
@ -68,9 +67,12 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
if (!wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, PMONITOR->output, &geometry))
continue;
// render the bad boy
wlr_output_layout_output_coords(g_pCompositor->m_sWLROutputLayout, PMONITOR->output, &w.m_vPosition.x, &w.m_vPosition.y);
SRenderData renderdata = {PMONITOR->output, time, w.m_vSize.x, w.m_vSize.y};
if (w.m_uSurface.xwayland->surface)
wlr_surface_for_each_surface(w.m_uSurface.xwayland->surface, renderSurface, &renderdata);
wlr_surface_for_each_surface(g_pXWaylandManager->getWindowSurface(&w), renderSurface, &renderdata);
}
}