mirror of
https://github.com/vale981/Hyprland
synced 2025-03-04 17:11:39 -05:00
cleanup: Revert use doLater instead of adding idle event handlers (#8624)
This reverts commit 6d7544458d
.
This commit is contained in:
parent
320144ae72
commit
f6ac755cf7
5 changed files with 39 additions and 32 deletions
|
@ -2,7 +2,6 @@
|
||||||
#include "../devices/Tablet.hpp"
|
#include "../devices/Tablet.hpp"
|
||||||
#include "../Compositor.hpp"
|
#include "../Compositor.hpp"
|
||||||
#include "../managers/SeatManager.hpp"
|
#include "../managers/SeatManager.hpp"
|
||||||
#include "../managers/eventLoop/EventLoopManager.hpp"
|
|
||||||
#include "core/Seat.hpp"
|
#include "core/Seat.hpp"
|
||||||
#include "core/Compositor.hpp"
|
#include "core/Compositor.hpp"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
@ -163,6 +162,11 @@ CTabletToolV2Resource::CTabletToolV2Resource(SP<CZwpTabletToolV2> resource_, SP<
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CTabletToolV2Resource::~CTabletToolV2Resource() {
|
||||||
|
if (frameSource)
|
||||||
|
wl_event_source_remove(frameSource);
|
||||||
|
}
|
||||||
|
|
||||||
bool CTabletToolV2Resource::good() {
|
bool CTabletToolV2Resource::good() {
|
||||||
return resource->resource();
|
return resource->resource();
|
||||||
}
|
}
|
||||||
|
@ -201,22 +205,20 @@ void CTabletToolV2Resource::sendData() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTabletToolV2Resource::queueFrame() {
|
void CTabletToolV2Resource::queueFrame() {
|
||||||
if (frameQueued)
|
if (frameSource)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
frameQueued = true;
|
frameSource = wl_event_loop_add_idle(g_pCompositor->m_sWLEventLoop, [](void* data) { ((CTabletToolV2Resource*)data)->sendFrame(false); }, this);
|
||||||
g_pEventLoopManager->doLater([this]() {
|
|
||||||
if (!frameQueued || tool.expired() || inert)
|
|
||||||
return;
|
|
||||||
|
|
||||||
sendFrame();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTabletToolV2Resource::sendFrame() {
|
void CTabletToolV2Resource::sendFrame(bool removeSource) {
|
||||||
frameQueued = false;
|
if (frameSource) {
|
||||||
|
if (removeSource)
|
||||||
|
wl_event_source_remove(frameSource);
|
||||||
|
frameSource = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
if (!current || !resource)
|
if (!current)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
timespec now;
|
timespec now;
|
||||||
|
|
|
@ -112,20 +112,21 @@ class CTabletV2Resource {
|
||||||
class CTabletToolV2Resource {
|
class CTabletToolV2Resource {
|
||||||
public:
|
public:
|
||||||
CTabletToolV2Resource(SP<CZwpTabletToolV2> resource_, SP<CTabletTool> tool_, SP<CTabletSeat> seat_);
|
CTabletToolV2Resource(SP<CZwpTabletToolV2> resource_, SP<CTabletTool> tool_, SP<CTabletSeat> seat_);
|
||||||
|
~CTabletToolV2Resource();
|
||||||
|
|
||||||
bool good();
|
bool good();
|
||||||
void sendData();
|
void sendData();
|
||||||
void queueFrame();
|
void queueFrame();
|
||||||
void sendFrame();
|
void sendFrame(bool removeSource = true);
|
||||||
|
|
||||||
bool current = false;
|
bool current = false;
|
||||||
WP<CWLSurfaceResource> lastSurf;
|
WP<CWLSurfaceResource> lastSurf;
|
||||||
|
|
||||||
WP<CTabletTool> tool;
|
WP<CTabletTool> tool;
|
||||||
WP<CTabletSeat> seat;
|
WP<CTabletSeat> seat;
|
||||||
|
wl_event_source* frameSource = nullptr;
|
||||||
|
|
||||||
bool frameQueued = false;
|
bool inert = false; // removed was sent
|
||||||
bool inert = false; // removed was sent
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SP<CZwpTabletToolV2> resource;
|
SP<CZwpTabletToolV2> resource;
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "../Compositor.hpp"
|
#include "../Compositor.hpp"
|
||||||
#include "../managers/SeatManager.hpp"
|
#include "../managers/SeatManager.hpp"
|
||||||
#include "../managers/eventLoop/EventLoopManager.hpp"
|
|
||||||
#include "core/Seat.hpp"
|
#include "core/Seat.hpp"
|
||||||
#include "core/Compositor.hpp"
|
#include "core/Compositor.hpp"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
@ -470,6 +469,8 @@ CXDGSurfaceResource::CXDGSurfaceResource(SP<CXdgSurface> resource_, SP<CXDGWMBas
|
||||||
|
|
||||||
CXDGSurfaceResource::~CXDGSurfaceResource() {
|
CXDGSurfaceResource::~CXDGSurfaceResource() {
|
||||||
events.destroy.emit();
|
events.destroy.emit();
|
||||||
|
if (configureSource)
|
||||||
|
wl_event_source_remove(configureSource);
|
||||||
if (surface)
|
if (surface)
|
||||||
surface->resetRole();
|
surface->resetRole();
|
||||||
}
|
}
|
||||||
|
@ -483,23 +484,22 @@ SP<CXDGSurfaceResource> CXDGSurfaceResource::fromResource(wl_resource* res) {
|
||||||
return data ? data->self.lock() : nullptr;
|
return data ? data->self.lock() : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void onConfigure(void* data) {
|
||||||
|
((CXDGSurfaceResource*)data)->configure();
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CXDGSurfaceResource::scheduleConfigure() {
|
uint32_t CXDGSurfaceResource::scheduleConfigure() {
|
||||||
if (configureScheduled)
|
if (configureSource)
|
||||||
return scheduledSerial;
|
return scheduledSerial;
|
||||||
|
|
||||||
|
configureSource = wl_event_loop_add_idle(g_pCompositor->m_sWLEventLoop, onConfigure, this);
|
||||||
scheduledSerial = wl_display_next_serial(g_pCompositor->m_sWLDisplay);
|
scheduledSerial = wl_display_next_serial(g_pCompositor->m_sWLDisplay);
|
||||||
|
|
||||||
configureScheduled = true;
|
|
||||||
g_pEventLoopManager->doLater([this]() { configure(); });
|
|
||||||
|
|
||||||
return scheduledSerial;
|
return scheduledSerial;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CXDGSurfaceResource::configure() {
|
void CXDGSurfaceResource::configure() {
|
||||||
if (!resource)
|
configureSource = nullptr;
|
||||||
return;
|
|
||||||
|
|
||||||
configureScheduled = false;
|
|
||||||
resource->sendConfigure(scheduledSerial);
|
resource->sendConfigure(scheduledSerial);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -199,12 +199,12 @@ class CXDGSurfaceResource {
|
||||||
void configure();
|
void configure();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SP<CXdgSurface> resource;
|
SP<CXdgSurface> resource;
|
||||||
|
|
||||||
uint32_t lastConfigureSerial = 0;
|
uint32_t lastConfigureSerial = 0;
|
||||||
uint32_t scheduledSerial = 0;
|
uint32_t scheduledSerial = 0;
|
||||||
|
|
||||||
bool configureScheduled = false;
|
wl_event_source* configureSource = nullptr;
|
||||||
|
|
||||||
//
|
//
|
||||||
std::vector<WP<CXDGPopupResource>> popups;
|
std::vector<WP<CXDGPopupResource>> popups;
|
||||||
|
|
|
@ -176,6 +176,11 @@ static bool openSockets(std::array<int, 2>& sockets, int display) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void startServer(void* data) {
|
||||||
|
if (!g_pXWayland->pServer->start())
|
||||||
|
Debug::log(ERR, "The XWayland server could not start! XWayland will not work...");
|
||||||
|
}
|
||||||
|
|
||||||
static int xwaylandReady(int fd, uint32_t mask, void* data) {
|
static int xwaylandReady(int fd, uint32_t mask, void* data) {
|
||||||
return g_pXWayland->pServer->ready(fd, mask);
|
return g_pXWayland->pServer->ready(fd, mask);
|
||||||
}
|
}
|
||||||
|
@ -303,10 +308,9 @@ bool CXWaylandServer::create() {
|
||||||
|
|
||||||
setenv("DISPLAY", displayName.c_str(), true);
|
setenv("DISPLAY", displayName.c_str(), true);
|
||||||
|
|
||||||
g_pEventLoopManager->doLater([this]() {
|
// TODO: lazy mode
|
||||||
if (!start())
|
|
||||||
Debug::log(ERR, "The XWayland server could not start! XWayland will not work...");
|
idleSource = wl_event_loop_add_idle(g_pCompositor->m_sWLEventLoop, ::startServer, nullptr);
|
||||||
});
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue