Add support for disabling mouse interactions with the background (#176)

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
This commit is contained in:
Alexis Maiquez 2023-09-23 18:20:35 +02:00
parent 89612ea6c2
commit 21c38d9fd1
9 changed files with 39 additions and 3 deletions

View File

@ -27,6 +27,7 @@ struct option long_options[] = {
{ "set-property", required_argument, nullptr, 'o' },
{ "noautomute", no_argument, nullptr, 'm' },
{ "no-fullscreen-pause", no_argument, nullptr, 'n' },
{ "disable-mouse", no_argument, nullptr, 'e' },
{ nullptr, 0, nullptr, 0 }
};
@ -72,6 +73,10 @@ CApplicationContext::CApplicationContext (int argc, char* argv[])
.volume = 15,
.automute = true
},
.mouse =
{
.enabled = true,
},
.screenshot =
{
.take = false,
@ -185,6 +190,10 @@ CApplicationContext::CApplicationContext (int argc, char* argv[])
this->settings.audio.automute = false;
break;
case 'e':
this->settings.mouse.enabled = false;
break;
default:
sLog.out ("Default on path parsing: ", optarg);
break;
@ -280,4 +289,5 @@ void CApplicationContext::printHelp (const char* route)
sLog.out ("\t--list-properties\t\t\tList all the available properties and their possible values");
sLog.out ("\t--set-property <name=value>\tOverrides the default value of the given property");
sLog.out ("\t--no-fullscreen-pause\tPrevents the background pausing when an app is fullscreen");
sLog.out ("\t--disable-mouse\tDisables mouse interactions");
}

View File

@ -84,6 +84,15 @@ namespace WallpaperEngine::Application
bool automute;
} audio;
/**
* Mouse input settings
*/
struct
{
/** If the mouse movement is enabled */
bool enabled;
} mouse;
/**
* Screenshot settings
*/

View File

@ -20,5 +20,10 @@ namespace WallpaperEngine::Application
bool enabled;
int volume;
} audio{};
struct
{
bool enabled;
} mouse{};
};
}

View File

@ -18,7 +18,7 @@ namespace WallpaperEngine::Input
/**
* The virtual pointer's position
*/
virtual glm::dvec2 position () const = 0;
[[nodiscard]] virtual glm::dvec2 position () const = 0;
};
}

View File

@ -12,6 +12,12 @@ CGLFWMouseInput::CGLFWMouseInput (Render::Drivers::CX11OpenGLDriver* driver) :
void CGLFWMouseInput::update ()
{
if (!this->m_driver->getApp ().getContext ().settings.mouse.enabled)
{
this->m_reportedPosition = {0, 0};
return;
}
// update current mouse position
glfwGetCursorPos (this->m_driver->getWindow (), &this->m_mousePosition.x, &this->m_mousePosition.y);
// interpolate to the new position

View File

@ -27,7 +27,7 @@ namespace WallpaperEngine::Input::Drivers
/**
* The virtual pointer's position
*/
glm::dvec2 position () const override;
[[nodiscard]] glm::dvec2 position () const override;
private:
Render::Drivers::CX11OpenGLDriver* m_driver;

View File

@ -14,6 +14,11 @@ void CWaylandMouseInput::update ()
glm::dvec2 CWaylandMouseInput::position() const
{
if (!this->waylandDriver->getApp().getContext ().settings.mouse.enabled)
{
return {0, 0};
}
if (waylandDriver->viewportInFocus && waylandDriver->viewportInFocus->rendering)
return waylandDriver->viewportInFocus->mousePos;

View File

@ -26,7 +26,7 @@ namespace WallpaperEngine::Input::Drivers
/**
* The virtual pointer's position
*/
glm::dvec2 position () const override;
[[nodiscard]] glm::dvec2 position () const override;
private:
/**

View File

@ -10,6 +10,7 @@
#include "WallpaperEngine/Render/Drivers/CVideoDriver.h"
#include "WallpaperEngine/Application/CApplicationContext.h"
#include "WallpaperEngine/Application/CWallpaperApplication.h"
#include "WallpaperEngine/Render/Drivers/Detectors/CWaylandFullScreenDetector.h"
#include "WallpaperEngine/Render/Drivers/Output/CWaylandOutputViewport.h"
#include "WallpaperEngine/Render/Drivers/Output/CWaylandOutput.h"