Compare commits

...

13 Commits

Author SHA1 Message Date
a7ae06060a Handle "move" workspace event 2025-01-02 16:32:15 +01:00
Sergey Naumov
f8d5903f42 Merge pull request #42 from Thaodan/support_sigc++3
Optionally support sig-c++-3.0
2023-11-20 12:48:04 +06:00
Björn Bidar
50ae7287c2 Optionally support sig-c++-3.0
Fall back to sig-c++2.0 if not found

Signed-off-by: Björn Bidar <bjorn.bidar@thaodan.de>
2023-10-12 02:52:26 +03:00
Björn Bidar
9e294ff8c3 Pass buff size correctly inside the tests
Resolves #41.

Fixes: 51a5ba57cc #41
Signed-off-by: Björn Bidar <bjorn.bidar@thaodan.de>
2023-10-12 01:24:18 +03:00
Björn Bidar
aa131bd08d Ignore more development related files
Signed-off-by: Björn Bidar <bjorn.bidar@thaodan.de>
2023-10-11 22:56:50 +03:00
Björn Bidar
58e316c65b Document that i3/ipc.h is needed for building
Signed-off-by: Björn Bidar <bjorn.bidar@thaodan.de>
2023-10-11 22:56:50 +03:00
Björn Bidar
3bac0dd37d Don't include timestamp in build, breaks reproducability
Signed-off-by: Björn Bidar <bjorn.bidar@thaodan.de>
2023-10-11 22:56:49 +03:00
Sergey Naumov
1bf594d1f2 Merge pull request #39 from JosefUtbult/multiple_window_manager_fix
Fix assertion fail when using a non i3 window manager
2022-11-24 17:07:36 +03:00
Josef Utbult
ee4ce3ddc5 Fix assertion fail when using a non i3 window manager 2022-11-18 18:58:20 +01:00
Sergey Naumov
7c2f465cbb Merge pull request #37 from Zebradil/dev
Fix build issues
2022-05-30 21:23:42 +03:00
German Lashevich
2caac6e083 Fix build issues
- `std::copy_n` requires to #include <algorithm>
- `std::optional` requires C++17 or newer
2022-05-29 20:10:04 +02:00
Sergey Naumov
83f4e80175 Merge pull request #36 from misopeth/dev
Solve issue #35
2021-12-31 21:36:26 +03:00
Francesco Galizzi
bd71b09d9b Solve issue #35 2021-12-31 17:23:11 +01:00
7 changed files with 45 additions and 27 deletions

8
.gitignore vendored
View File

@@ -1,4 +1,8 @@
build
doc
build/
doc/
*.sublime-workspace
*.log
.ccls*
*.o
compile_commands.*

View File

@@ -1,15 +1,23 @@
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(i3ipc++)
string(TIMESTAMP I3IPCppBUILD_DATETIME "%Y-%m-%d %H:%M:%S")
option(I3IPCpp_WITH_TESTS "Build unit tests executables" OFF)
option(I3IPCpp_BUILD_EXAMPLES "Build example executables" OFF)
find_package(PkgConfig)
pkg_check_modules(SIGCPP REQUIRED sigc++-2.0)
pkg_check_modules(JSONCPP REQUIRED jsoncpp)
file(GLOB_RECURSE SRC src/*.cpp)
add_library(i3ipc++ ${SRC})
find_package(PkgConfig)
pkg_check_modules(JSONCPP REQUIRED jsoncpp)
pkg_check_modules(SIGCPP sigc++-3.0)
if(SIGCPP_FOUND)
target_compile_definitions(i3ipc++
PUBLIC I3CPP_IPC_SIGCPP3=${SIGCPP_FOUND}
)
else()
pkg_check_modules(SIGCPP REQUIRED sigc++-2.0)
endif()
set(I3IPCpp_INCLUDE_DIRS
${SIGCPP_INCLUDE_DIRS}
@@ -33,8 +41,6 @@ set(I3IPCpp_LIBRARIES
# set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3 -DDEBUG")
# set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
file(GLOB_RECURSE SRC src/*.cpp)
add_library(i3ipc++ ${SRC})
target_include_directories(i3ipc++
PUBLIC
@@ -57,11 +63,7 @@ target_link_libraries(i3ipc++
)
target_compile_options(i3ipc++
PRIVATE -std=c++11 -Wall -Wextra -Wno-unused-parameter
)
target_compile_definitions(i3ipc++
PRIVATE I3IPC_BUILD_DATETIME="${I3IPCppBUILD_DATETIME}"
PRIVATE -std=c++17 -Wall -Wextra -Wno-unused-parameter
)
if (CMAKE_BUILD_TYPE STREQUAL "DEBUG")

View File

@@ -10,6 +10,7 @@ An implementation of i3 IPC in C++11.
* C++11 compiler
* sigc++ 2.0
* jsoncpp
* i3 (for i3/ipc.h)
## Using
Yet the only way of using is to add this repo as a submodule

View File

@@ -30,8 +30,8 @@ std::string get_socketpath();
* Primitive of rectangle
*/
struct rect_t {
uint32_t x; ///< Position on X axis
uint32_t y; ///< Position on Y axis
int32_t x; ///< Position on X axis
int32_t y; ///< Position on Y axis
uint32_t width; ///< Width of rectangle
uint32_t height; ///< Height of rectangle
};
@@ -95,6 +95,7 @@ enum class WorkspaceEventType : char {
RENAME = 'r', ///< Renamed
RELOAD = 'l', ///< Reloaded
RESTORED = 's', ///< Restored
MOVE = 'm', ///< Moved (to output)
};
/**
@@ -369,14 +370,21 @@ public:
* Disconnect the event socket
*/
void disconnect_event_socket();
sigc::signal<void, const workspace_event_t&> signal_workspace_event; ///< Workspace event signal
#ifdef I3CPP_IPC_SIGCPP3
sigc::signal<void(const workspace_event_t&)> signal_workspace_event; ///< Workspace event signal
sigc::signal<void()> signal_output_event; ///< Output event signal
sigc::signal<void(const mode_t&)> signal_mode_event; ///< Output mode event signal
sigc::signal<void(const window_event_t&)> signal_window_event; ///< Window event signal
sigc::signal<void(const bar_config_t&)> signal_barconfig_update_event; ///< Barconfig update event signal
sigc::signal<void(const binding_t&)> signal_binding_event; ///< Binding event signal
sigc::signal<void(EventType, const std::shared_ptr<const buf_t>&)> signal_event; ///< i3 event signal @note Default handler routes event to signal according to type
#else
sigc::signal<void, const workspace_event_t&> signal_workspace_event; ///< Workspace event signal
sigc::signal<void> signal_output_event; ///< Output event signal
sigc::signal<void, const mode_t&> signal_mode_event; ///< Output mode event signal
sigc::signal<void, const window_event_t&> signal_window_event; ///< Window event signal
sigc::signal<void, const bar_config_t&> signal_barconfig_update_event; ///< Barconfig update event signal
sigc::signal<void, const binding_t&> signal_binding_event; ///< Binding event signal
sigc::signal<void, EventType, const std::shared_ptr<const buf_t>&> signal_event; ///< i3 event signal @note Default handler routes event to signal according to type
#endif
private:
const int32_t m_main_socket;
int32_t m_event_socket;

View File

@@ -8,6 +8,7 @@ extern "C" {
#include <errno.h>
}
#include <algorithm>
#include <cstring>
#include <ios>
@@ -30,7 +31,7 @@ errno_error::errno_error(const std::string& msg) : ipc_error(format_errno(msg))
static const std::string g_i3_ipc_magic = "i3-ipc";
buf_t::buf_t(uint32_t payload_size) :
buf_t::buf_t(uint32_t payload_size) :
data(sizeof(header_t) + payload_size, 0),
header(reinterpret_cast<header_t*>(data.data())),
payload(reinterpret_cast<char*>(data.data() + sizeof(header_t)))
@@ -54,7 +55,7 @@ int32_t i3_connect(const std::string& socket_path) {
}
(void)fcntl(sockfd, F_SETFD, FD_CLOEXEC); // What for?
struct sockaddr_un addr;
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_LOCAL;

View File

@@ -45,8 +45,8 @@ std::vector<std::ostream*> g_logging_err_outs = {
inline rect_t parse_rect_from_json(const Json::Value& value) {
return {
.x = value["x"].asUInt(),
.y = value["y"].asUInt(),
.x = value["x"].asInt(),
.y = value["y"].asInt(),
.width = value["width"].asUInt(),
.height = value["height"].asUInt(),
};
@@ -325,7 +325,7 @@ std::string get_socketpath() {
pclose(in);
str = str_buf;
}
if (str.back() == '\n') {
if (str.length() > 0 && str.back() == '\n') {
str.pop_back();
}
return str;
@@ -355,6 +355,8 @@ connection::connection(const std::string& socket_path) : m_main_socket(i3_conne
ev.type = WorkspaceEventType::RELOAD;
} else if (change == "restored") {
ev.type = WorkspaceEventType::RESTORED;
} else if(change == "move") {
ev.type = WorkspaceEventType::MOVE;
} else {
I3IPC_WARN("Unknown workspace event type " << change)
break;
@@ -661,7 +663,7 @@ const version_t& get_version() {
#define I3IPC_VERSION_MINOR 5
#define I3IPC_VERSION_PATCH 0
static version_t version = {
.human_readable = auss_t() << I3IPC_VERSION_MAJOR << '.' << I3IPC_VERSION_MINOR << '.' << I3IPC_VERSION_PATCH << " (built on " << I3IPC_BUILD_DATETIME << ")",
.human_readable = auss_t() << I3IPC_VERSION_MAJOR << '.' << I3IPC_VERSION_MINOR << '.' << I3IPC_VERSION_PATCH,
.loaded_config_file_name = std::string(),
.major = I3IPC_VERSION_MAJOR,
.minor = I3IPC_VERSION_MINOR,

View File

@@ -14,7 +14,7 @@ public:
auto buff = i3_pack(ClientMessageType::COMMAND, "exit");
auss_t auss;
auss << std::hex;
for (uint32_t i = 0; i < buff->size; i++) {
for (uint32_t i = 0; i < buff->data.size(); i++) {
if (buff->data[i] < 0x10) {
auss << '0';
}