From af5cdf2f017a012bfc2ea4a5157607f12ce76ce9 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 9 Sep 2017 00:45:03 +0300 Subject: Add logging wm events for SDL2. --- src/CMakeLists.txt | 4 ++ src/Makefile.am | 2 + src/eventsmanager.cpp | 28 +++++++++++++ src/eventsmanager.h | 2 + src/progs/dyecmd/client.cpp | 9 +--- src/progs/manaplus/client.cpp | 9 +--- src/utils/x11logger.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++ src/utils/x11logger.h | 38 +++++++++++++++++ 8 files changed, 173 insertions(+), 16 deletions(-) create mode 100644 src/utils/x11logger.cpp create mode 100644 src/utils/x11logger.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2894c5d0d..4049b940c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -962,6 +962,8 @@ SET(SRCS utils/timer.cpp utils/timer.h utils/vector.h + utils/x11logger.cpp + utils/x11logger.h fs/virtfs/file.cpp fs/virtfs/file.h utils/mutex.h @@ -1885,6 +1887,8 @@ SET(DYE_CMD_SRCS utils/timer.cpp utils/timer.h utils/vector.h + utils/x11logger.cpp + utils/x11logger.h fs/virtfs/virtfile.cpp fs/virtfs/virtfile.h utils/xml.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 23883c487..c82a336e7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -648,6 +648,8 @@ BASE_SRC += client.h \ utils/timer.cpp \ utils/timer.h \ utils/vector.h \ + utils/x11logger.cpp \ + utils/x11logger.h \ fs/virtfs/file.cpp \ fs/virtfs/file.h \ utils/mutex.h \ diff --git a/src/eventsmanager.cpp b/src/eventsmanager.cpp index 36c6e2d23..9a4c8b0f2 100644 --- a/src/eventsmanager.cpp +++ b/src/eventsmanager.cpp @@ -38,6 +38,8 @@ #include "input/inputmanager.h" #ifdef USE_SDL2 +#include "utils/x11logger.h" + #include "render/graphics.h" #else // USE_SDL2 #include "logger.h" @@ -67,6 +69,17 @@ void EventsManager::init() config.addListener("logInput", this); } +void EventsManager::enableEvents() +{ + // disable unused SDL events +#ifndef USE_SDL2 + SDL_EventState(SDL_VIDEOEXPOSE, SDL_IGNORE); +#endif // USE_SDL2 + + SDL_EventState(SDL_SYSWMEVENT, mLogInput ? SDL_ENABLE : SDL_IGNORE); + SDL_EventState(SDL_USEREVENT, SDL_IGNORE); +} + void EventsManager::shutdown() { config.removeListeners(this); @@ -435,8 +448,23 @@ void EventsManager::logEvent(const SDL_Event &event) logger->log("event: SDL_QUIT"); break; case SDL_SYSWMEVENT: + { +#ifdef USE_SDL2 + bool res = false; +#ifdef USE_X11 + res = X11Logger::logEvent(event); +#endif // USE_X11 + + if (res == false) + logger->assertLog("event: SDL_SYSWMEVENT: not supported:"); + break; +#else // USE_SDL2 + logger->log("event: SDL_SYSWMEVENT"); +#endif // USE_SDL2 + break; + } case SDL_USEREVENT: logger->log("event: SDL_USEREVENT"); break; diff --git a/src/eventsmanager.h b/src/eventsmanager.h index 02a118448..725040ca4 100644 --- a/src/eventsmanager.h +++ b/src/eventsmanager.h @@ -41,6 +41,8 @@ class EventsManager final : public ConfigListener void init(); + void enableEvents(); + void shutdown(); bool handleEvents() const; diff --git a/src/progs/dyecmd/client.cpp b/src/progs/dyecmd/client.cpp index 8685cc024..a46227f08 100644 --- a/src/progs/dyecmd/client.cpp +++ b/src/progs/dyecmd/client.cpp @@ -243,14 +243,7 @@ void Client::gameInit() #endif // USE_SDL2 WindowManager::applyKeyRepeat(); - - // disable unused SDL events -#ifndef USE_SDL2 - SDL_EventState(SDL_VIDEOEXPOSE, SDL_IGNORE); -#endif // USE_SDL2 - - SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE); - SDL_EventState(SDL_USEREVENT, SDL_IGNORE); + eventsManager.enableEvents(); #ifdef WIN32 Dirs::extractDataDir(); diff --git a/src/progs/manaplus/client.cpp b/src/progs/manaplus/client.cpp index aaacdc7a6..6526fc82a 100644 --- a/src/progs/manaplus/client.cpp +++ b/src/progs/manaplus/client.cpp @@ -372,14 +372,7 @@ void Client::gameInit() #endif // USE_SDL2 WindowManager::applyKeyRepeat(); - - // disable unused SDL events -#ifndef USE_SDL2 - SDL_EventState(SDL_VIDEOEXPOSE, SDL_IGNORE); -#endif // USE_SDL2 - - SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE); - SDL_EventState(SDL_USEREVENT, SDL_IGNORE); + eventsManager.enableEvents(); #ifdef WIN32 Dirs::extractDataDir(); diff --git a/src/utils/x11logger.cpp b/src/utils/x11logger.cpp new file mode 100644 index 000000000..a61a940b7 --- /dev/null +++ b/src/utils/x11logger.cpp @@ -0,0 +1,97 @@ +/* + * The ManaPlus Client + * Copyright (C) 2017 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifdef USE_SDL2 +#ifdef USE_X11 + +#include "utils/x11logger.h" + +#include "logger.h" + +PRAGMA48(GCC diagnostic push) +PRAGMA48(GCC diagnostic ignored "-Wshadow") +#include +#include +PRAGMA48(GCC diagnostic pop) + +#include "utils/stringutils.h" + +#include "debug.h" + +#define logType(val, str) \ + case val: \ + typeStr = str; \ + break + +bool X11Logger::logEvent(const SDL_Event &event) +{ + if (event.syswm.msg->subsystem != SDL_SYSWM_X11) + return false; + std::string typeStr; + + const int type = event.syswm.msg->msg.x11.event.type; + switch (type) + { + logType(2, "KeyPress"); + logType(3, "KeyRelease"); + logType(4, "ButtonPress"); + logType(5, "ButtonRelease"); + logType(6, "MotionNotify"); + logType(7, "EnterNotify"); + logType(8, "LeaveNotify"); + logType(9, "FocusIn"); + logType(10, "FocusOut"); + logType(11, "KeymapNotify"); + logType(12, "Expose"); + logType(13, "GraphicsExpose"); + logType(14, "NoExpose"); + logType(15, "VisibilityNotify"); + logType(16, "CreateNotify"); + logType(17, "DestroyNotify"); + logType(18, "UnmapNotify"); + logType(19, "MapNotify"); + logType(20, "MapRequest"); + logType(21, "ReparentNotify"); + logType(22, "ConfigureNotify"); + logType(23, "ConfigureRequest"); + logType(24, "GravityNotify"); + logType(25, "ResizeRequest"); + logType(26, "CirculateNotify"); + logType(27, "CirculateRequest"); + logType(28, "PropertyNotify"); + logType(29, "SelectionClear"); + logType(30, "SelectionRequest"); + logType(31, "SelectionNotify"); + logType(32, "ColormapNotify"); + logType(33, "ClientMessage"); + logType(34, "MappingNotify"); + logType(35, "GenericEvent"); + default: + typeStr = strprintf("Unknown: %d", type); + break; + } + + logger->log("event: SDL_SYSWMEVENT: X11: %s", + typeStr.c_str()); + return true; +} + +#endif // USE_X11 +#endif // USE_SDL2 diff --git a/src/utils/x11logger.h b/src/utils/x11logger.h new file mode 100644 index 000000000..e7307ce51 --- /dev/null +++ b/src/utils/x11logger.h @@ -0,0 +1,38 @@ +/* + * The ManaPlus Client + * Copyright (C) 2017 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef UTILS_X11LOGGER_H +#define UTILS_X11LOGGER_H + +#ifdef USE_SDL2 +#ifdef USE_X11 + +#include "localconsts.h" + +union SDL_Event; + +namespace X11Logger +{ + bool logEvent(const SDL_Event &event); +} // namespace X11Logger + +#endif // USE_X11 +#endif // USE_SDL2 +#endif // UTILS_X11LOGGER_H -- cgit v1.2.3-70-g09d2