diff --git a/hyprland-share-picker/main.cpp b/hyprland-share-picker/main.cpp index d09a27d..ff8f206 100644 --- a/hyprland-share-picker/main.cpp +++ b/hyprland-share-picker/main.cpp @@ -77,9 +77,14 @@ std::vector getWindows(const char* env) { int main(int argc, char* argv[]) { qputenv("QT_LOGGING_RULES", "qml=false"); - const char* WINDOWLISTSTR = getenv("XDPH_WINDOW_SHARING_LIST"); + bool allowTokenByDefault = false; + for (int i = 1; i < argc; ++i) { + if (argv[i] == std::string{"--allow-token"}) + allowTokenByDefault = true; + } - const auto WINDOWLIST = getWindows(WINDOWLISTSTR); + const char* WINDOWLISTSTR = getenv("XDPH_WINDOW_SHARING_LIST"); + const auto WINDOWLIST = getWindows(WINDOWLISTSTR); QApplication picker(argc, argv); pickerPtr = &picker; @@ -90,8 +95,11 @@ int main(int argc, char* argv[]) { w.setGeometry(0, 0, settings->value("width").toInt(), settings->value("height").toInt()); // get the tabwidget - const auto TABWIDGET = w.findChild("tabWidget"); - const auto ALLOWTOKENBUTTON = w.findChild("checkBox"); + const auto TABWIDGET = w.findChild("tabWidget"); + const auto ALLOWTOKENBUTTON = w.findChild("checkBox"); + + if (allowTokenByDefault) + ALLOWTOKENBUTTON->setCheckState(Qt::CheckState::Checked); const auto TAB1 = (QWidget*)TABWIDGET->children()[0]; @@ -106,13 +114,13 @@ int main(int argc, char* argv[]) { constexpr int BUTTON_HEIGHT = 41; for (int i = 0; i < SCREENS.size(); ++i) { - const auto GEOMETRY = SCREENS[i]->geometry(); + const auto GEOMETRY = SCREENS[i]->geometry(); - QString text = QString::fromStdString(std::string("Screen " + std::to_string(i) + " at " + std::to_string(GEOMETRY.x()) + ", " + std::to_string(GEOMETRY.y()) + " (" + - std::to_string(GEOMETRY.width()) + "x" + std::to_string(GEOMETRY.height()) + ") (") + - SCREENS[i]->name().toStdString() + ")"); - QString outputName = SCREENS[i]->name(); - ElidedButton* button = new ElidedButton(text); + QString text = QString::fromStdString(std::string("Screen " + std::to_string(i) + " at " + std::to_string(GEOMETRY.x()) + ", " + std::to_string(GEOMETRY.y()) + " (" + + std::to_string(GEOMETRY.width()) + "x" + std::to_string(GEOMETRY.height()) + ") (") + + SCREENS[i]->name().toStdString() + ")"); + QString outputName = SCREENS[i]->name(); + ElidedButton* button = new ElidedButton(text); button->setMinimumSize(0, BUTTON_HEIGHT); SCREENS_SCROLL_AREA_CONTENTS_LAYOUT->addWidget(button); @@ -132,7 +140,7 @@ int main(int argc, char* argv[]) { }); } - QSpacerItem * SCREENS_SPACER = new QSpacerItem(0,10000, QSizePolicy::Expanding, QSizePolicy::Expanding); + QSpacerItem* SCREENS_SPACER = new QSpacerItem(0, 10000, QSizePolicy::Expanding, QSizePolicy::Expanding); SCREENS_SCROLL_AREA_CONTENTS_LAYOUT->addItem(SCREENS_SPACER); // windows @@ -144,7 +152,7 @@ int main(int argc, char* argv[]) { // loop over them int windowIterator = 0; for (auto& window : WINDOWLIST) { - QString text = QString::fromStdString(window.clazz + ": " + window.name); + QString text = QString::fromStdString(window.clazz + ": " + window.name); ElidedButton* button = new ElidedButton(text); button->setMinimumSize(0, BUTTON_HEIGHT); @@ -170,20 +178,19 @@ int main(int argc, char* argv[]) { windowIterator++; } - QSpacerItem * WINDOWS_SPACER = new QSpacerItem(0,10000, QSizePolicy::Expanding, QSizePolicy::Expanding); + QSpacerItem* WINDOWS_SPACER = new QSpacerItem(0, 10000, QSizePolicy::Expanding, QSizePolicy::Expanding); WINDOWS_SCROLL_AREA_CONTENTS_LAYOUT->addItem(WINDOWS_SPACER); // lastly, region - const auto REGION_OBJECT = (QWidget*)TAB1->findChild("region"); - const auto REGION_LAYOUT = REGION_OBJECT->layout(); + const auto REGION_OBJECT = (QWidget*)TAB1->findChild("region"); + const auto REGION_LAYOUT = REGION_OBJECT->layout(); + + QString text = "Select region..."; - QString text = "Select region..."; - ElidedButton* button = new ElidedButton(text); button->setMaximumSize(400, BUTTON_HEIGHT); REGION_LAYOUT->addWidget(button); - QObject::connect(button, &QPushButton::clicked, [=]() { auto REGION = execAndGet("slurp -f \"%o %x %y %w %h\""); REGION = REGION.substr(0, REGION.length()); diff --git a/src/core/PortalManager.cpp b/src/core/PortalManager.cpp index 2a7e142..1a2b388 100644 --- a/src/core/PortalManager.cpp +++ b/src/core/PortalManager.cpp @@ -42,6 +42,7 @@ CPortalManager::CPortalManager() { m_sConfig.config->addConfigValue("general:toplevel_dynamic_bind", Hyprlang::INT{0L}); m_sConfig.config->addConfigValue("screencopy:max_fps", Hyprlang::INT{120L}); + m_sConfig.config->addConfigValue("screencopy:allow_token_by_default", Hyprlang::INT{0L}); m_sConfig.config->commence(); m_sConfig.config->parse(); diff --git a/src/shared/ScreencopyShared.cpp b/src/shared/ScreencopyShared.cpp index ce7a923..23a7bd4 100644 --- a/src/shared/ScreencopyShared.cpp +++ b/src/shared/ScreencopyShared.cpp @@ -36,17 +36,21 @@ std::string buildWindowList() { } SSelectionData promptForScreencopySelection() { - SSelectionData data; + SSelectionData data; - const char* WAYLAND_DISPLAY = getenv("WAYLAND_DISPLAY"); - const char* XCURSOR_SIZE = getenv("XCURSOR_SIZE"); - const char* HYPRLAND_INSTANCE_SIGNATURE = getenv("HYPRLAND_INSTANCE_SIGNATURE"); + const char* WAYLAND_DISPLAY = getenv("WAYLAND_DISPLAY"); + const char* XCURSOR_SIZE = getenv("XCURSOR_SIZE"); + const char* HYPRLAND_INSTANCE_SIGNATURE = getenv("HYPRLAND_INSTANCE_SIGNATURE"); + + static auto* const* PALLOWTOKENBYDEFAULT = + (Hyprlang::INT* const*)g_pPortalManager->m_sConfig.config->getConfigValuePtr("screencopy:allow_token_by_default")->getDataStaticPtr(); // DANGEROUS: we are sending a list of app IDs and titles via env. Make sure it's in 'singlequotes' to avoid something like $(rm -rf /) // TODO: this is dumb, use a pipe or something. std::string cmd = - std::format("WAYLAND_DISPLAY='{}' QT_QPA_PLATFORM='wayland' XCURSOR_SIZE='{}' HYPRLAND_INSTANCE_SIGNATURE='{}' XDPH_WINDOW_SHARING_LIST='{}' hyprland-share-picker 2>&1", - WAYLAND_DISPLAY ? WAYLAND_DISPLAY : "", XCURSOR_SIZE ? XCURSOR_SIZE : "24", HYPRLAND_INSTANCE_SIGNATURE ? HYPRLAND_INSTANCE_SIGNATURE : "0", buildWindowList()); + std::format("WAYLAND_DISPLAY='{}' QT_QPA_PLATFORM='wayland' XCURSOR_SIZE='{}' HYPRLAND_INSTANCE_SIGNATURE='{}' XDPH_WINDOW_SHARING_LIST='{}' hyprland-share-picker{} 2>&1", + WAYLAND_DISPLAY ? WAYLAND_DISPLAY : "", XCURSOR_SIZE ? XCURSOR_SIZE : "24", HYPRLAND_INSTANCE_SIGNATURE ? HYPRLAND_INSTANCE_SIGNATURE : "0", buildWindowList(), + (**PALLOWTOKENBYDEFAULT ? " --allow-token" : "")); const auto RETVAL = execAndGet(cmd.c_str());