Session: Add cursor theme initialization

pull/9/head
reionwong 5 years ago
parent d21d511f1a
commit 6fad84a28f

@ -27,3 +27,4 @@ add_subdirectory(xembed-sni-proxy)
add_subdirectory(powerman)
add_subdirectory(cpufreq)
add_subdirectory(chotkeys)
add_subdirectory(cupdatecursor)

@ -0,0 +1,17 @@
find_package(Qt5 COMPONENTS Core Gui X11Extras REQUIRED)
find_package(X11)
add_executable(cupdatecursor
main.cpp
)
target_link_libraries(cupdatecursor
Qt5::Core
Qt5::Gui
Qt5::X11Extras
${X11_LIBRARIES}
X11::X11
X11::Xi
X11::Xcursor
)
install(TARGETS cupdatecursor DESTINATION /usr/bin)

@ -0,0 +1,53 @@
#include <QGuiApplication>
#include <QX11Info>
#include <QFile>
#include <QDebug>
#include <QSettings>
#include <QStandardPaths>
#include <X11/X.h>
#include <X11/Xcursor/Xcursor.h>
inline void applyTheme(const QString &theme, int size)
{
Display *display = QX11Info::display();
if (!theme.isEmpty())
XcursorSetTheme(display, QFile::encodeName(theme));
if (size >= 0)
XcursorSetDefaultSize(display, size);
Cursor handle = XcursorLibraryLoadCursor(display, "left_ptr");
XDefineCursor(display, DefaultRootWindow(display), handle);
XFreeCursor(display, handle);
XFlush(display);
// For KWin
QSettings settings(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/kcminputrc",
QSettings::IniFormat);
settings.beginGroup("Mouse");
settings.setValue("cursorTheme", theme);
settings.setValue("cursorSize", size);
settings.endGroup();
settings.sync();
}
int main(int argc, char *argv[])
{
QGuiApplication::setDesktopSettingsAware(false);
QGuiApplication a(argc, argv);
if (argc != 3)
return 1;
if (!QX11Info::isPlatformX11())
return 2;
QString theme = QFile::decodeName(argv[1]);
QString size = QFile::decodeName(argv[2]);
applyTheme(theme, size.toInt());
return 0;
}

@ -93,6 +93,7 @@ Application::Application(int &argc, char **argv)
createConfigDirectory();
initLanguage();
initScreenScaleFactors();
initCursor();
initFontDpi();
initEnvironments();
@ -169,6 +170,18 @@ void Application::initFontDpi()
p.waitForFinished(-1);
}
void Application::initCursor()
{
QSettings settings(QSettings::UserScope, "cutefishos", "theme");
qreal scaleFactor = settings.value("PixelRatio", 1.0).toReal();
QString theme = settings.value("cursorTheme", "default").toString();
int size = settings.value("cursorSize", 24).toInt();
runSync("cupdatecursor", {theme, QString::number(size * scaleFactor)});
qputenv("XCURSOR_THEME", theme.toLatin1());
qputenv("XCURSOR_SIZE", QByteArray::number(size * scaleFactor));
}
void Application::initLanguage()
{
QSettings settings(QSettings::UserScope, "cutefishos", "language");

@ -64,6 +64,7 @@ public slots:
private:
void initEnvironments();
void initFontDpi();
void initCursor();
void initLanguage();
void initScreenScaleFactors();
bool syncDBusEnvironment();

Loading…
Cancel
Save