feat(cursor): use cursor-shape-v1 cursor names instead of Gdk::CursorType
This commit is contained in:
+1
-1
@@ -41,7 +41,7 @@ class AModule : public IModule {
|
|||||||
const Json::Value& config_;
|
const Json::Value& config_;
|
||||||
Gtk::EventBox event_box_;
|
Gtk::EventBox event_box_;
|
||||||
|
|
||||||
virtual void setCursor(Gdk::CursorType const& c);
|
virtual void setCursor(std::string const& c);
|
||||||
|
|
||||||
virtual bool handleToggle(GdkEventButton* const& ev);
|
virtual bool handleToggle(GdkEventButton* const& ev);
|
||||||
virtual bool handleMouseEnter(GdkEventCrossing* const& ev);
|
virtual bool handleMouseEnter(GdkEventCrossing* const& ev);
|
||||||
|
|||||||
@@ -47,14 +47,13 @@ configured in your `config.jsonc`. If set to `false`, when hovering the module a
|
|||||||
will not be shown. Default behavior is to indicate an interaction event is
|
will not be shown. Default behavior is to indicate an interaction event is
|
||||||
available.
|
available.
|
||||||
|
|
||||||
There are more cursor types to choose from by setting the `cursor` option to
|
If set to a string value, it must be a valid cursor name
|
||||||
a number, see Gdk3 official docs for all possible cursor types:
|
(e.g. `"pointer"`, `"default"`, `"grab"`, `"text"`, `"crosshair"`, etc.),
|
||||||
https://docs.gtk.org/gdk3/enum.CursorType.html.
|
see the cursor-shape-v1 protocol for all possible cursor types:
|
||||||
However, note that not all cursor options listed may be available on
|
https://wayland.app/protocols/cursor-shape-v1#wp_cursor_shape_device_v1:enum:shape.
|
||||||
your system. If you attempt to use a cursor which is not available, the
|
Depending on the compositor and cursor theme used, cursors not listed in the protocol may also work.
|
||||||
application will crash.
|
|
||||||
|
|
||||||
Example of disabling pointer(`Gdk::Hand2`) cursor type on a custom module:
|
Example of disabling the cursor on a custom module:
|
||||||
|
|
||||||
```
|
```
|
||||||
"custom/my-custom-module": {
|
"custom/my-custom-module": {
|
||||||
@@ -63,13 +62,12 @@ Example of disabling pointer(`Gdk::Hand2`) cursor type on a custom module:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Example of setting cursor type to `Gdk::Boat`(according to
|
Example of setting the cursor type to `"grab"`:
|
||||||
https://docs.gtk.org/gdk3/enum.CursorType.html#boat):
|
|
||||||
|
|
||||||
```
|
```
|
||||||
"custom/my-custom-module": {
|
"custom/my-custom-module": {
|
||||||
...
|
...
|
||||||
"cursor": 8,
|
"cursor": "grab",
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+7
-7
@@ -73,9 +73,9 @@ AModule::AModule(const Json::Value& config, const std::string& name, const std::
|
|||||||
// Respect user configuration of cursor
|
// Respect user configuration of cursor
|
||||||
if (config_.isMember("cursor")) {
|
if (config_.isMember("cursor")) {
|
||||||
if (config_["cursor"].isBool() && config_["cursor"].asBool()) {
|
if (config_["cursor"].isBool() && config_["cursor"].asBool()) {
|
||||||
setCursor(Gdk::HAND2);
|
setCursor("pointer");
|
||||||
} else if (config_["cursor"].isInt()) {
|
} else if (config_["cursor"].isString()) {
|
||||||
setCursor(Gdk::CursorType(config_["cursor"].asInt()));
|
setCursor(config_["cursor"].asString());
|
||||||
} else {
|
} else {
|
||||||
spdlog::warn("unknown cursor option configured on module {}", name_);
|
spdlog::warn("unknown cursor option configured on module {}", name_);
|
||||||
}
|
}
|
||||||
@@ -110,10 +110,10 @@ auto AModule::doAction(const std::string& name) -> void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AModule::setCursor(Gdk::CursorType const& c) {
|
void AModule::setCursor(std::string const& c) {
|
||||||
auto gdk_window = event_box_.get_window();
|
auto gdk_window = event_box_.get_window();
|
||||||
if (gdk_window) {
|
if (gdk_window) {
|
||||||
auto cursor = Gdk::Cursor::create(c);
|
auto cursor = Gdk::Cursor::create(gdk_window->get_display(), c);
|
||||||
gdk_window->set_cursor(cursor);
|
gdk_window->set_cursor(cursor);
|
||||||
} else {
|
} else {
|
||||||
// window may not be accessible yet, in this case,
|
// window may not be accessible yet, in this case,
|
||||||
@@ -134,7 +134,7 @@ bool AModule::handleMouseEnter(GdkEventCrossing* const& e) {
|
|||||||
|
|
||||||
// Default behavior indicating event availability
|
// Default behavior indicating event availability
|
||||||
if (hasUserEvents_ && !config_.isMember("cursor")) {
|
if (hasUserEvents_ && !config_.isMember("cursor")) {
|
||||||
setCursor(Gdk::HAND2);
|
setCursor("pointer");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -147,7 +147,7 @@ bool AModule::handleMouseLeave(GdkEventCrossing* const& e) {
|
|||||||
|
|
||||||
// Default behavior indicating event availability
|
// Default behavior indicating event availability
|
||||||
if (hasUserEvents_ && !config_.isMember("cursor")) {
|
if (hasUserEvents_ && !config_.isMember("cursor")) {
|
||||||
setCursor(Gdk::ARROW);
|
setCursor("default");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
#include "gdkmm/cursor.h"
|
|
||||||
#include "gdkmm/event.h"
|
#include "gdkmm/event.h"
|
||||||
#include "gdkmm/types.h"
|
#include "gdkmm/types.h"
|
||||||
#include "glibmm/fileutils.h"
|
#include "glibmm/fileutils.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user