pax_global_header00006660000000000000000000000064151674271370014527gustar00rootroot0000000000000052 comment=66c11771d11adc25aba350d8f91695e1899a1c2b pvanek-qlipper-d7b29d0/000077500000000000000000000000001516742713700151025ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/CHANGELOG000066400000000000000000000153151516742713700163210ustar00rootroot000000000000006.1.0 / 2026-04-14 ================== * Fix SEGFAULT on pushing same object to both * Add possibility to show items by D-Bus call 6.0.0 / 2025-12-15 ================== * Plenty of translation updates * Port to Qt v6 * Add wayland support (using KF6) 5.1.2 / 2019-02-26 ================== * Added clearing history confirmation * Fixed FTBFS for clipboard sharing * Translation improvements 5.1.1 / 2017-12-08 ================== * Increase version (forgotten in previous release) * travis: Fix the build 5.1.0 / 2017-12-07 ================== * Updated CHANGELOG * Added .gitignore and .gitattributes * build: Require Qt v5.6 * Added Lithuanian translation * added Polish translation to CMakeLists * added Polish translation * Make LXQt-Autostart optional * Added merged autostart to CMakeLists.txt * Added Catalan translation to CMake list * Add Catalan translation * Synchronized Chinese (simplified) translation from latest source * Added Chinese (simplified) translation to CMake list * Added Chinese (simplified) translation * Updated *_da.desktop files and removed *_da_DK.desktop files * systray: Don't display clipboard items in context menu * travis-ci: Update the PPA for pulling Qt * Add ability to change tray icon. * preferences: Cleanup&sort items in preferences dialog * main: Use std::lock_guard * fixup...do the locking correctly * build: Require C++11 * Allow only one instance of application * build: Remove QtSingleApplication as not used * Add instant clipboards synchronization * Fix build with ENABLE_NETWORK_CLIPBOARD_SHARING enabled. * qlipperitem: Handle different type as equal * Update desktop entries and Replace fr_FR by fr * Update Greek translation (el) Remove country variant from language code * CMake: Adds Runtime and Devel install COMPONENTs * Coding style changes * Updates the build system to use the Targets infrastructure * lxqt-qlipper-autostart: added X-LXQt-Need-Tray key * Drops hardcoded /etc/xdg paths * Updated german translation, replaced Qt4 by Qt in all xsession/translations * Renames some .desktop files * Updates translations infrastructure * Update the required minimum cmake version * remove dead template lines switch OnlyShowIn from Razor -> LXQt stringchanges LxQt -> LXQt * Support lxqt-session and add necessary xdg autostart desktop entry files. * Add default configuration files for lxde-qt session 5.0.0 / 2016-11-02 ================== * Added CHANGELOG * Make history items synchronization configurable * model: Update model behaviour * model: Fix setting current item * Travis: Adds Clang to the compiler list * signalhandler: Quit gracefully on unix signals * travis-ci: Initial configuration file * Bump copyright year in about to 2016 * Merge pull request #37 from ufleisch/emacs * Do not prevent Emacs from using clipboard, only store mime data, #35. * Merge pull request #33 from palinek/gimp_crash_fix * item: Workaround possible gimp crash * windows: executable icon * compilation fix on windows. QXT_GUI_EXPORT commented out * Merge pull request #29 from stefonarch/patch-1 * Merge pull request #28 from pmattern/transl-de * Update qlipper_it.ts * Add German translation * Merge pull request #27 from agaida/patch-1 * Fix Qt5.5 compilation * Merge pull request #23 from palinek/clip_wrap_gtk_fix * use QClipboard wrapper to fix multiple issues * Merge pull request #21 from palinek/prim_synchr * added option to synchronize primary selection & clipboard * Merge branch 'master' of github.com:pvanek/qlipper * implemented #14 Option to flush the list when closing the session * Merge pull request #18 from stefonarch/master * prova * Merge pull request #16 from paulolieuthier/master * change the adress in prefrences dialog to github * translation loading fixed (ts files use underscore in names) * increase max-items-count in the config * Install the app icon to the hicolor theme * fixed missing global keyboard shortcut in Qt5 * Merge pull request #11 from luis-pereira/make-it-compile * Make it build * Remove reference to non existent source file * qt5 migration initial changes (broken, uncompilable) * larger icon for #16 Please ship a larger icon for Qlipper * Merge pull request #3 from kensington/master * Include system QtSingleApplication headers when using external build. 2.0.2 / 2013-07-29 ================== * version bump * Merge pull request #1 from siduction/master * Added qxt search path for debian based systems * mail address changed * fixed: #13: please use libxqt from system, not bundled * Czech language file update. * fix build on new linuxes * build fixes * Moc only Q_OBJECT classes * Replaces QApplication by QtSingleApplication * Adds qtsingleapplications files to the build system * Refactors ENABLE_NETWORK stuff * Adds QtSolutions LICENSE * Import part of qtsingleapplication from QtSolutions * fix for prefs gui (init showcase) * make network support optional (and experimental) * Merge branch 'master' of gitorious.org:qlipper/qlipper * fix non-ascii characters restoring from saved history * compilation fixes for linux * accept only data from differen machines (not own broadcasts) * optional network broadcast implemented * cmake build based now; so long qmake * Merge branch 'master' of gitorious.org:qlipper/qlipper * fixed #8: Left mouse menu is hidden behind systray. * fixes for "platform specific" features (missing mode) * icon displaying and storage * version bump * another os2 try * another fixes for os2 * qxt fixes for OS2 * reimplementation of clipboard handling and backend storage - it can keep all mimetypes now (office, media...) * install fix * make release for buggy qmake * bold font optimization * highlight current clipboard fix; do not copy sticky to dynamic is it's not necessary * highlight current item * fix for trimmed vs trim only end of lines * serbian translations by Mladen Pejaković * fixed Issue 6: qlipper won't paste copied text after application exits * don't display window decoration for standalone menu * fix for empty models for free window * potential fix for Issue 7: Does not compile under Windows XP * licensing * fix for settings to enum reading * proper image/url handling * size prefs window on mac * better src code organization * translations; mac files; etc. * show menu on all mouse clicks * tooltips * version mark; TODO resolved * close shortcut window too * preferences simplified; icon drawing * prefs; tunning * progress: sticky and dynamic save/restore; mac timer; preferences * progress in implementation: sticky, icons... * initial revision of qlipper rework pvanek-qlipper-d7b29d0/CMakeLists.txt000066400000000000000000000253561516742713700176550ustar00rootroot00000000000000# CMakeLists.txt # ------------------------------------------------------- # An initial version of the cmake build for qlipper. # WORK IN PROGRESS. USE qmake STILL FOR NOW, PLEASE! # Currently tested on unix only. # ------------------------------------------------------- # UNIX - usage (for OSX see below) # 1. cd qlipper/root/dir # 2. mkdir build # 3. cd build # 4. cmake ../qlipper-git -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=debug (or release, by default) # 5. make # 6. make install # ------------------------------------------------------- # WINDOWS - usage # You have to have MinGW installed (it works with MinGW). If you use different compiler, then "make" steps will differ. # You have to have CMake installed. # I recommend using cmake-gui to generate and configure MakeFiles like this. # 1. Run cmake-gui and select folder which contains top-level CMakelists.txt file into "Where the is source code" box. This can be also done in command line via simpler cmake.exe. # 2. Select folder which you want to contain compiled binaries into "Where to build the binaries" box. # 3. Hit Configure button (make any changes to variables first) and select MinGW Makefiles as generator. Choose "Specify native compilers". # 4. Now input path to C++ compiler. For example "C:/QtSDK/mingw/bin/g++.exe", then hit "Finish". # 5. Project will configure now, hit "Configure" button again. Then hit "Generate" button and close cmake-gui. # 6. Run your command line as ADMINISTRATOR and navigate to your "Where to build the binaries" folder. # 7. Run "mingw32-make.exe" command. Note that -j3 parameter may speed-up building. Your files gets compiled now. # 8. Run "mingw32-make.exe install" command. Your files gets copied into directory specified by CMAKE_INSTALL_PREFIX variable. # 9. You are done. # 10. Run "make install" to install application to CMAKE_INSTALL_PREFIX (which is se to C:\Program Files\qlipper\ by default - can be changed in step 3). # ------------------------------------------------------- # MAC OS X # 1. cd qlipper/root/dir # 2. mkdir build # 3. cd build # 4. cmake ../qlipper-git -DCMAKE_INSTALL_PREFIX=../release -DCMAKE_BUILD_TYPE=debug (or release, by default) # 5. make # 6. make install # now is the qlipper.app bundle created. But it can run only in current machine. # If you need "redistributable" binary call: # 7. make bundle # It will copy all dependecies (libs/resources) into bundle tree # ------------------------------------------------------- CMAKE_MINIMUM_REQUIRED(VERSION 3.11) # from 3.1.0 to 3.6 because CMake now don't support backward compatibility for CMake < v3.5 # and in future support for 3.11 is also getting dropped ! project(qlipper) set(QLIPPER_VERSION 6.1.0) option(ENABLE_NETWORK_CLIPBOARD_SHARING "Enables experimental network support for clipboard sharing" OFF) option(ENABLE_LXQT_AUTOSTART "Enables autostart for LXQt" OFF) option(USE_SYSTEM_QXT "Use system Qxt Library for global shortcuts; off for Qt6" OFF) LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) find_package(Qt6 REQUIRED COMPONENTS Widgets DBus LinguistTools) find_package(KF6GuiAddons REQUIRED) # Qt 6.10: Usage of a private Qt module Foo now requires a call to find_package(Qt6 COMPONENTS FooPrivate) to make the Qt6::FooPrivate target available. if (Qt6Gui_VERSION VERSION_GREATER_EQUAL "6.10.0") find_package(Qt6 REQUIRED COMPONENTS GuiPrivate) endif() if (USE_SYSTEM_QXT) find_package(Qxt) message(STATUS "Use system Qxt Library: " ${USE_SYSTEM_QXT}) if (USE_SYSTEM_QXT AND NOT QXT_FOUND) message(FATAL_ERROR "System Qxt not found") endif () endif() set(EXE_NAME "qlipper") if (APPLE) set(EXE_NAME "QLipper") endif (APPLE) add_definitions(-DIS_CMAKE) add_definitions(-DQLIPPER_VERSION="${QLIPPER_VERSION}") if (ENABLE_NETWORK_CLIPBOARD_SHARING) add_definitions(-DENABLE_NETWORK_CLIPBOARD_SHARING) find_package(Qt6Network REQUIRED) endif (ENABLE_NETWORK_CLIPBOARD_SHARING) # source code and compilation set (QLIPPER_HEADERS qkeysequencewidget/qkeysequencewidget.h qkeysequencewidget/qkeysequencewidget_p.h qmenuview/qmenuview.h qmenuview/qmenuview_p.h src/qlippermodel.h src/qlipperpreferencesdialog.h src/qlippersystray.h src/qlippernetwork.h src/clipboardwrap.h src/qlipperdbusinterface.h ) set (QLIPPER_SOURCES qkeysequencewidget/qkeysequencewidget.cpp qmenuview/qmenuview.cpp src/main.cpp src/qlipperitem.cpp src/qlippermodel.cpp src/qlipperpreferences.cpp src/qlipperpreferencesdialog.cpp src/qlippersystray.cpp src/qlippernetwork.cpp src/clipboardwrap.cpp src/qlipperdbusinterface.cpp ) if (WIN32) set(QLIPPER_SOURCES ${QLIPPER_SOURCES} src/icons/qlipper.rc) endif (WIN32) if (UNIX) list(APPEND QLIPPER_HEADERS src/signalhandler.h) list(APPEND QLIPPER_SOURCES src/signalhandler.cpp) endif (UNIX) if (NOT QXT_FOUND) set (HAVE_QXT 1) if (APPLE) set (QLIPPER_SOURCES ${QLIPPER_SOURCES} qxt/qxtglobalshortcut_mac.cpp) elseif (WIN32) set (QLIPPER_SOURCES ${QLIPPER_SOURCES} qxt/qxtglobalshortcut_win.cpp) elseif (UNIX) set (QLIPPER_SOURCES ${QLIPPER_SOURCES} qxt/qxtglobalshortcut_x11.cpp) include_directories(${Qt6Gui_PRIVATE_INCLUDE_DIRS}) else () set (HAVE_QXT 0) add_definitions(-DNO_QXT) endif () if (HAVE_QXT) set (QLIPPER_SOURCES ${QLIPPER_SOURCES} qxt/qxtglobalshortcut.cpp ) set (QLIPPER_HEADERS ${QLIPPER_HEADERS} qxt/qxtglobalshortcut.h ) endif (HAVE_QXT) endif (NOT QXT_FOUND) if (APPLE) set (QLIPPER_SOURCES ${QLIPPER_SOURCES} macosx/qlipper.icns) FIND_LIBRARY(CARBON_LIBRARY Carbon REQURED) MESSAGE(STATUS "CARBON_LIBRARY: ${CARBON_LIBRARY}") elseif (UNIX) FIND_PACKAGE(X11 REQUIRED) MESSAGE(STATUS "X11_X11_LIB: ${X11_X11_LIB}") endif () set (QLIPPER_FORMS src/qlipperpreferencesdialog.ui ) set (QLIPPER_RESOURCES src/qlipper.qrc ) set (QLIPPER_TRANSLATIONS ts/qlipper_ca.ts ts/qlipper_cs.ts ts/qlipper_de.ts ts/qlipper_es.ts ts/qlipper_ja.ts ts/qlipper_lt.ts ts/qlipper_pl.ts ts/qlipper_sr.ts ts/qlipper_sv.ts ts/qlipper_it.ts ts/qlipper_zh_CN.ts ts/qlipper_pt.ts ) QT6_WRAP_UI( QLIPPER_UI ${QLIPPER_FORMS} ) QT6_WRAP_CPP( QLIPPER_MOC ${QLIPPER_HEADERS} ) QT6_ADD_RESOURCES( QLIPPER_RCC ${QLIPPER_RESOURCES} ) QT6_ADD_TRANSLATION( QLIPPER_QM ${QLIPPER_TRANSLATIONS} ) include_directories ( ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/qkeysequencewidget ${CMAKE_CURRENT_SOURCE_DIR}/qxt ${CMAKE_CURRENT_SOURCE_DIR}/qmenuview ) if (NOT QXT_FOUND) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/qxt) endif (NOT QXT_FOUND) add_executable( ${EXE_NAME} WIN32 MACOSX_BUNDLE ${QLIPPER_SOURCES} ${QLIPPER_UI} ${QLIPPER_MOC} ${QLIPPER_RCC} ${QLIPPER_QM} ) set_property(TARGET ${EXE_NAME} PROPERTY CXX_STANDARD 11) set_property(TARGET ${EXE_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) target_link_libraries( ${EXE_NAME} PRIVATE Qt6::Widgets Qt6::DBus KF6::GuiAddons Qt6::GuiPrivate ) if (ENABLE_NETWORK_CLIPBOARD_SHARING) target_link_libraries( ${EXE_NAME} PUBLIC Qt6::Network ) endif(ENABLE_NETWORK_CLIPBOARD_SHARING) # single app and optional network features #target_link_libraries( ${EXE_NAME} ${QT_QTNETWORK_LIBRARY}) if (APPLE) target_link_libraries(${EXE_NAME} PUBLIC ${CARBON_LIBRARY} ) elseif (UNIX) target_link_libraries(${EXE_NAME} PUBLIC ${X11_X11_LIB} ) endif () if (QXT_FOUND) target_link_libraries(${EXE_NAME} ${QXT_CORE_LIB} ${QXT_GUI_LIB}) endif (QXT_FOUND) # installation if (APPLE) # mac's bundle install SET_TARGET_PROPERTIES(${EXE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/macosx/Info.plist.in") SET(MACOSX_BUNDLE_ICON_FILE qlipper.icns) SET(MACOSX_BUNDLE_INFO_STRING "${EXE_NAME} ${QLIPPER_VERSION}") SET(MACOSX_BUNDLE_GUI_IDENTIFIER "cz.yarpen.qlipper") SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${QLIPPER_VERSION}") SET(MACOSX_BUNDLE_BUNDLE_NAME "${EXE_NAME}") SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${QLIPPER_VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${QLIPPER_VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "(c) Petr Vanek") SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/macosx/qlipper.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) INSTALL(TARGETS ${EXE_NAME} BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}) install(FILES ${QLIPPER_QM} DESTINATION ${CMAKE_INSTALL_PREFIX}/${EXE_NAME}.app/Contents/Resources/translations) # create a "transportable" bundle - all libs into the bundle: "make bundle" after make install configure_file(macosx/bundle.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/bundle.cmake @ONLY) add_custom_target(bundle ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/bundle.cmake) elseif (WIN32) install(TARGETS ${EXE_NAME} RUNTIME DESTINATION ./) install(FILES ${QLIPPER_QM} DESTINATION ./translations) elseif (UNIX) install(TARGETS ${EXE_NAME} RUNTIME DESTINATION bin) install(FILES qlipper.desktop DESTINATION share/applications) install(FILES src/icons/qlipper.png DESTINATION share/icons/hicolor/128x128/apps) install(FILES ${QLIPPER_QM} DESTINATION share/qlipper/translations) add_definitions(-DTRANSLATION_DIR="${CMAKE_INSTALL_PREFIX}/share/qlipper/translations") endif () # make dist custom target SET(CPACK_PACKAGE_NAME "qlipper") SET(CPACK_PACKAGE_VERSION ${QLIPPER_VERSION}) SET(CPACK_SOURCE_GENERATOR "TBZ2") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") SET(CPACK_IGNORE_FILES "/CVS/;/\\\\.svn/;/\\\\.git/;\\\\.swp$;\\\\.#;/#;\\\\.tar.gz$;/CMakeFiles/;CMakeCache.txt;\\\\.qm$;/build/;/release/;\\\\.diff$;.DS_Store'") SET(CPACK_SOURCE_IGNORE_FILES ${CPACK_IGNORE_FILES}) INCLUDE(CPack) # simulate autotools' "make dist" add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) # make lupdate # it generates new translation files add_custom_target(lupdate ${QT_QMAKE_EXECUTABLE} -project -o ${CMAKE_CURRENT_BINARY_DIR}/qlipper.pro COMMAND ${QT_LUPDATE_EXECUTABLE} -noobsolete ${CMAKE_CURRENT_BINARY_DIR}/qlipper.pro WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) # lrelease add_custom_target(lrelease ${QT_QMAKE_EXECUTABLE} -project -o ${CMAKE_CURRENT_BINARY_DIR}/qlipper.pro COMMAND ${QT_LRELEASE_EXECUTABLE} -compress ${CMAKE_CURRENT_BINARY_DIR}/qlipper.pro WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) # merged from lxqt-common if (ENABLE_LXQT_AUTOSTART) set(LXQTBT_MINIMUM_VERSION "2.0.0") find_package(lxqt2-build-tools ${LXQTBT_MINIMUM_VERSION} REQUIRED) include(LXQtConfigVars) include(LXQtTranslateDesktop) add_subdirectory(lxqt-autostart) endif () pvanek-qlipper-d7b29d0/COPYING000066400000000000000000000354351516742713700161470ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS pvanek-qlipper-d7b29d0/README000066400000000000000000000005741516742713700157700ustar00rootroot00000000000000Lightweight and cross-platform clipboard history applet. Petr Vanek This application is a part of QtDesktop project so you can download prebuilt binary packages from its repository. It's improved version of original Qlipper which is available only as a download from qt-apps.org. This SW can be used on Linux, BSD, MS Windows, and Mac OS X. License: GPLv2+ pvanek-qlipper-d7b29d0/cmake/000077500000000000000000000000001516742713700161625ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/cmake/FindQxt.cmake000066400000000000000000000027131516742713700205440ustar00rootroot00000000000000# QXT_FOUND # QXT_INCLUDE_PATH # QXT_CORE_LIB # QXT_GUI_LIB IF (WIN32) FIND_PATH( QXT_INCLUDE_PATH QxtCore $ENV{PROGRAMFILES}/QxtCore PATHS/include/ DOC "The directory where QxtCore resides") FIND_LIBRARY( QXT_CORE_LIB NAMES QxtCore PATHS/lib $ENV{PROGRAMFILES}/lib DOC "The Qxt core library") FIND_LIBRARY( QXT_GUI_LIB NAMES QxtGui PATHS/lib $ENV{PROGRAMFILES}/lib DOC "The Qxt gui library") ELSE (WIN32) FIND_PATH( QXT_INCLUDE_PATH QxtCore /usr/include /usr/include/qxt /usr/local/include /sw/include /opt/local/include DOC "The directory where QxtCore resides") FIND_LIBRARY( QXT_CORE_LIB NAMES QxtCore PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib /sw/lib /opt/local/lib DOC "The Qxt core library") FIND_LIBRARY( QXT_GUI_LIB NAMES QxtGui PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib /sw/lib /opt/local/lib DOC "The Qxt gui library") ENDIF (WIN32) IF (QXT_INCLUDE_PATH) SET( QXT_FOUND 1 CACHE STRING "Set to 1 if QXT is found, 0 otherwise") ELSE (QXT_INCLUDE_PATH) SET( QXT_FOUND 0 CACHE STRING "Set to 1 if QXT is found, 0 otherwise") ENDIF (QXT_INCLUDE_PATH) SET( QXT_LIBS ${QXT_CORE_LIB} ${QXT_GUI_LIB} ) MARK_AS_ADVANCED( QXT_FOUND ) pvanek-qlipper-d7b29d0/lxqt-autostart/000077500000000000000000000000001516742713700201165ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/lxqt-autostart/CMakeLists.txt000066400000000000000000000007031516742713700226560ustar00rootroot00000000000000CMAKE_MINIMUM_REQUIRED(VERSION 3.11 FATAL_ERROR) file(GLOB DESKTOP_FILES_IN *.desktop.in) # Translations ********************************** lxqt_translate_desktop(DESKTOP_FILES SOURCES ${DESKTOP_FILES_IN} ) add_custom_target(autostart_desktop_files ALL DEPENDS ${DESKTOP_FILES}) #************************************************ install(FILES ${DESKTOP_FILES} DESTINATION "${LXQT_ETC_XDG_DIR}/autostart" COMPONENT Runtime ) pvanek-qlipper-d7b29d0/lxqt-autostart/lxqt-qlipper-autostart.desktop.in000066400000000000000000000002221516742713700266000ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=Qlipper TryExec=qlipper Exec=qlipper OnlyShowIn=LXQt; X-LXQt-Need-Tray=true #TRANSLATIONS_DIR=translations pvanek-qlipper-d7b29d0/lxqt-autostart/translations/000077500000000000000000000000001516742713700226375ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_ar.desktop000066400000000000000000000000621516742713700314000ustar00rootroot00000000000000# Translations Name[ar]=ذاكرة الحافظة pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_ca.desktop000066400000000000000000000000401516742713700313550ustar00rootroot00000000000000# Translations Name[ca]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_cs.desktop000066400000000000000000000000421516742713700314010ustar00rootroot00000000000000# Translations Name[cs]=Schránka pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_cs_CZ.desktop000066400000000000000000000000451516742713700320000ustar00rootroot00000000000000# Translations Name[cs_CZ]=Schránka pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_da.desktop000066400000000000000000000000401516742713700313560ustar00rootroot00000000000000# Translations Name[da]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_de.desktop000066400000000000000000000001211516742713700313620ustar00rootroot00000000000000# Translations Name[de]=Zwischenablage Comment[de]=Verwaltung der Zwischenablage pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_el.desktop000066400000000000000000000000401516742713700313720ustar00rootroot00000000000000# Translations Name[el]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_eo.desktop000066400000000000000000000000401516742713700313750ustar00rootroot00000000000000# Translations Name[eo]=Qlipilo pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_es.desktop000066400000000000000000000000401516742713700314010ustar00rootroot00000000000000# Translations Name[es]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_es_VE.desktop000066400000000000000000000000431516742713700317760ustar00rootroot00000000000000# Translations Name[es_VE]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_eu.desktop000066400000000000000000000000401516742713700314030ustar00rootroot00000000000000# Translations Name[eu]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_fi.desktop000066400000000000000000000000401516742713700313700ustar00rootroot00000000000000# Translations Name[fi]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_fr.desktop000066400000000000000000000000401516742713700314010ustar00rootroot00000000000000# Translations Name[fr]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_hu.desktop000066400000000000000000000000171516742713700314120ustar00rootroot00000000000000# Translations pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_ia.desktop000066400000000000000000000000171516742713700313670ustar00rootroot00000000000000# Translations pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_id_ID.desktop000066400000000000000000000000431516742713700317450ustar00rootroot00000000000000# Translations Name[id_ID]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_it_IT.desktop000066400000000000000000000000431516742713700320050ustar00rootroot00000000000000# Translations Name[it_IT]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_ja.desktop000066400000000000000000000000401516742713700313640ustar00rootroot00000000000000# Translations Name[ja]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_ko.desktop000066400000000000000000000000171516742713700314070ustar00rootroot00000000000000# Translations pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_lt.desktop000066400000000000000000000000401516742713700314110ustar00rootroot00000000000000# Translations Name[lt]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_nl.desktop000066400000000000000000000000411516742713700314040ustar00rootroot00000000000000# Translations Name[nl]=Qlembord pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_pl_PL.desktop000066400000000000000000000000431516742713700320030ustar00rootroot00000000000000# Translations Name[pl_PL]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_pt.desktop000066400000000000000000000000401516742713700314150ustar00rootroot00000000000000# Translations Name[pt]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_pt_BR.desktop000066400000000000000000000000431516742713700320030ustar00rootroot00000000000000# Translations Name[pt_BR]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_ro_RO.desktop000066400000000000000000000000431516742713700320150ustar00rootroot00000000000000# Translations Name[ro_RO]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_ru.desktop000066400000000000000000000000461516742713700314260ustar00rootroot00000000000000# Translations Name[ru]=Qлиппер pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_ru_RU.desktop000066400000000000000000000000431516742713700320310ustar00rootroot00000000000000# Translations Name[ru_RU]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_sl.desktop000066400000000000000000000000401516742713700314100ustar00rootroot00000000000000# Translations Name[sl]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_sr.desktop000066400000000000000000000000511516742713700314200ustar00rootroot00000000000000# Translations Name[sr]=Кјулипер pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_sr@ijekavian.desktop000066400000000000000000000000441516742713700334040ustar00rootroot00000000000000Name[sr@ijekavian]=Кјулипер pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_sr@ijekavianlatin.desktop000066400000000000000000000000411516742713700344310ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Kjuliper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_sr@latin.desktop000066400000000000000000000000471516742713700325550ustar00rootroot00000000000000# Translations Name[sr@latin]=Kjuliper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_sv.desktop000066400000000000000000000000401516742713700314220ustar00rootroot00000000000000# Translations Name[sv]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_th_TH.desktop000066400000000000000000000000431516742713700320030ustar00rootroot00000000000000# Translations Name[th_TH]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_tr.desktop000066400000000000000000000000401516742713700314170ustar00rootroot00000000000000# Translations Name[tr]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_uk.desktop000066400000000000000000000000401516742713700314110ustar00rootroot00000000000000# Translations Name[uk]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_zh_CN.GB2312.desktop000066400000000000000000000000171516742713700325760ustar00rootroot00000000000000# Translations pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_zh_CN.desktop000066400000000000000000000000431516742713700317760ustar00rootroot00000000000000# Translations Name[zh_CN]=Qlipper pvanek-qlipper-d7b29d0/lxqt-autostart/translations/lxqt-qlipper-autostart_zh_TW.desktop000066400000000000000000000000451516742713700320320ustar00rootroot00000000000000# Translations Name[zh_TW]=剪貼簿 pvanek-qlipper-d7b29d0/macosx/000077500000000000000000000000001516742713700163745ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/macosx/Info.plist.in000066400000000000000000000026541516742713700207600ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable ${MACOSX_BUNDLE_EXECUTABLE_NAME} CFBundleGetInfoString ${MACOSX_BUNDLE_INFO_STRING} CFBundleIconFile ${MACOSX_BUNDLE_ICON_FILE} CFBundleIdentifier ${MACOSX_BUNDLE_GUI_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString ${MACOSX_BUNDLE_LONG_VERSION_STRING} CFBundleName ${MACOSX_BUNDLE_BUNDLE_NAME} CFBundlePackageType APPL CFBundleShortVersionString ${MACOSX_BUNDLE_SHORT_VERSION_STRING} CFBundleSignature ???? CFBundleVersion ${MACOSX_BUNDLE_BUNDLE_VERSION} CSResourcesFileMapped LSRequiresCarbon NSHumanReadableCopyright ${MACOSX_BUNDLE_COPYRIGHT} NOTE Icon is disabled from dock. Only systray is used. LSUIElement 1 pvanek-qlipper-d7b29d0/macosx/bundle.cmake.in000066400000000000000000000033051516742713700212550ustar00rootroot00000000000000# # This is evil! I don't know why it works this way. # But it works. # # First - collect all Qt and app plugins. Then call that bloody # cmake FIXUP_BUNDLE macro which copis all files into MacOS directory. # So it's moved back to plugins tree where its expected by a) Qt b) app # # I hate it. # # qt_menu.nib is mandatory for mac if (@QT_USE_FRAMEWORKS@) file(COPY @QT_LIBRARY_DIR@/QtGui.framework/Resources/qt_menu.nib DESTINATION @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/Resources) else () file(COPY @QT_LIBRARY_DIR@/Resources/qt_menu.nib DESTINATION @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/Resources) endif () # the qt.conf is mandatory too file(WRITE @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/Resources/qt.conf "[Paths] Plugins = plugins") # copy all (required) Qt plugs into bundle message(STATUS "Searching for Qt plugs in: @QT_PLUGINS_DIR@/*@CMAKE_SHARED_LIBRARY_SUFFIX@") file(COPY @QT_PLUGINS_DIR@/ DESTINATION @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/plugins/ REGEX "(designer|script|debug|sql|dbg|phonon|bearer|gl|svg|accessible|race)" EXCLUDE) # try to FIXUP_BUNDLE - to change otool -L paths # currently it creates lots of false warnings when plugins are compiled as dylibs # warning: cannot resolve item 'libtepsonic_lastfmscrobbler.dylib' # etc. Ignore it. message(STATUS "Searching for plugs in bundle: @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/plugins/*@CMAKE_SHARED_LIBRARY_SUFFIX@") file(GLOB_RECURSE inplugs @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/plugins/*@CMAKE_SHARED_LIBRARY_SUFFIX@) include(BundleUtilities) fixup_bundle(@CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app "${inplugs}" @CMAKE_INSTALL_PREFIX@/Contents/plugins/) pvanek-qlipper-d7b29d0/macosx/qlipper.icns000066400000000000000000000643241516742713700207370ustar00rootroot00000000000000icnshis32 ~zwegwn{sRdk@p~羲xzBsV<*Iy8tz9v׆:xݱ;zwư;Wrǵ;mfԞ;@=[;;Fc:;Gm@;Bt~ty{{| }{+D883(' (&9 |lkѢ|_˔W^RvBӍFݕEDEUE&ݴEjcrEagyDbh}Jae 1l]P?1-. /.%]3 on ÷ݷr ٥l țukW ٧[ Y ZZU Z+Z}ZxXzax~ ?scP@;< >:.t?" s8mk rE C E E E E E E E D E 9f il32 v|gq SddahVqnPaQalEaankYQGX`nI79VlP`ۅqR`̀wT`{V`W`WaWamW ==TnW==XsƃW==\{W==bW==e~W==?kTUVW==)  =( v|gq ~xuhzkeܕnRVcӃcڀڇcϴcdƵddd ccodccqѓdccrdccwdccydccb|cdccC(  cB3# v|gq ¯ʭ䯆chϚ~ٝ~~ {{{{ة{{{{{{{{w{{S2   {R?+ l8mkIr -9<==<=>>=>>=4oF$'=AA@@@????@4 it328 v|gq SddahVqnPaQalEaankYQGX`nI79VlP`ۅqR`̀wT`{V`W`WaWamW ==TnW==XsƃW==\{W==bW==e~W==?kTUVW==)  =( v|gq ~xuhzkeܕnRVcӃcڀڇcϴcdƵddd ccodccqѓdccrdccwdccydccb|cdccC(  cB3# v|gq ¯ʭ䯆chϚ~ٝ~~ {{{{ة{{{{{{{{w{{S2   {R?+ t8mk@Ir -9<==<=>>=>>=4oF$'=AA@@@????@4 ic08 jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 )3ӝO)M)ZB3h-$I' Pvm\U|"Oǂ|P>D)Ze?.^IvE4 R Dr@>A Kdou)FbH2ׁ$$>0J**v#}3>`(Kd~)FcgY%J0dhXJ|a@A*~LW{#؜;B?>%?@N_Ĕ9$CfTV*~|>@@Lg$*Xpް@@>A:K';Z#_!Ja]ַU[qdAb$5Xyv|^R0mBS^|A=hȿ UFYVnNNBw#4{& z\RAxmu5XF8Y1x%3kerA@>Ap#U'C&Ȇ" GFJ6QxZy'xQ5hd`R:Z)UêԾwvU6Ȃ=j;{o j>}X"EYrxk?QSVDHo>QJ:ۦZM{fGJ<1Ϡ:v(abzu? SB|d#%kn(Uh76BWkaC1Gt/bsDBY2My45ߛb&uȸmWJ '}Ud ̆nwhW]IXGL^`+]8U*6#XgEi}!A}<c+!Kh -ʞGOQZ7a&כ;j4Xi瓫S'nBAn>9uY518O𱗢z~^vMF-T,a$kY<Ira%JT4Q[ [5m<exU;CHs9kb4MdІgWܛ1 "0[BKA?9?K! ~A p'}Pbi#@ObGݯ4 ,䔂5xDF98JĊ5GdlLǭ3H ?zݹ?1{@b͛V:2c.q \Y'7FJMmL/c@c ,`|D)1yA )x7rr$tGݺ94V>0ʲ Q!ԃ0->($$tbʓC9lh`ʲ10ğv%+6 FD0dR)&>?>+LC{C8/F܅,Rv@x+U#o|>A0Hд{Xj]жR՚>A Щ[ vBhzySFqhJ4({]<&g&sv3C`1==h𦘘 s1ꯓxCVi:AyZV+92ˏ[?xsN(f0گMmv9̜^k$ K| >AW`."Rdu1#J(gF*0@>AG3'Ff8}xw9NʢOr47hvE]'qh|}0G;%>+ !ӉȻb8>76z[.|rGdL %}'}}A=i GrMtݔZR[}K v2 sK@y̐*-FȚDLaSB{\ŕSk$Pi!)WuX/'⭬UK:^ 5ohxܮ(g%J<9EPkDy7FaXf~R7P֗1/~qW`O'?8|2tJQl-1ث2 dit@ռ"22]PnJAv1eDqs7yXnGrǚPh Q5>%_o~qW|'O_ 2qs_\V(dQSv h{F"x;RJ (4ݛ_A#* ~ b#]rg@ m)%`#8aa+Ixه,dL*'tE=$'"W.J+؆) dܜVᅴpDrn7; 9oS C;։,Pݪ>Xi瓫S'nBAn>9uY518O𱗢z~^vMF-T,a$kY<Ira%JT4Q[ [5m<exU;CHs9kb4MdІgWܛ1 "0[A~B$rKx2 ?_K@p'}Pbi#@ObGݯ4 ,䔂5xDF98JĊ5GdlLǭ3H ?zݹ?1{@b͛V:2c.q \Y'7FJMmL/c@c ,`|D)1y All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.pvanek-qlipper-d7b29d0/qkeysequencewidget/qkeysequencewidget.cpp000066400000000000000000000343121516742713700254250ustar00rootroot00000000000000/****************************************************************************** Copyright (c) 2010, Artem Galichkin All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #include #include #include #include #include "qkeysequencewidget_p.h" #include "qkeysequencewidget.h" /*! Creates a QKeySequenceWidget object wuth \a parent and empty \a keySequence */ QKeySequenceWidget::QKeySequenceWidget(QWidget *parent) : QWidget(parent), d_ptr(new QKeySequenceWidgetPrivate()) { Q_D(QKeySequenceWidget); d->q_ptr = this; d->init(QKeySequence(), QString()); _connectingSlots(); } /*! Creates a QKeySequenceWidget object wuth \a parent and keysequence \a keySequence and string for \a noneString */ QKeySequenceWidget::QKeySequenceWidget(QKeySequence seq, QString noneString, QWidget *parent) : QWidget(parent), d_ptr(new QKeySequenceWidgetPrivate()) { Q_D(QKeySequenceWidget); d->q_ptr = this; qDebug() << "q_prt " << this; d->init(seq, noneString); _connectingSlots(); } /*! Creates a QKeySequenceWidget object wuth \a parent and keysequence \a keySequence */ QKeySequenceWidget::QKeySequenceWidget(QKeySequence seq, QWidget *parent) : QWidget(parent), d_ptr(new QKeySequenceWidgetPrivate()) { qDebug() << "widget constructor"; Q_D(QKeySequenceWidget); d->q_ptr = this; qDebug() << "q_prt " << this; d->init(seq, QString()); _connectingSlots(); } /*! Creates a QKeySequenceWidget object wuth \a parent and string for \a noneString */ QKeySequenceWidget::QKeySequenceWidget(QString noneString, QWidget *parent) : QWidget(parent), d_ptr(new QKeySequenceWidgetPrivate()) { qDebug() << "widget constructor"; Q_D(QKeySequenceWidget); d->q_ptr = this; qDebug() << "q_prt " << this; d->init(QKeySequence(), noneString); _connectingSlots(); } /*! Destroy a QKeySequenceWidget object */ QKeySequenceWidget::~QKeySequenceWidget() { delete d_ptr; } QSize QKeySequenceWidget::sizeHint() const { return d_ptr->shortcutButton->sizeHint(); } /*! Setting tooltip text to sequence button \param tip Text string */ void QKeySequenceWidget::setToolTip(const QString &tip) { d_ptr->setToolTip(tip); } /*! Setting mode of Clear Buttorn display. \param show Position of clear button \a ClearButtornShow \sa clearButtonShow */ void QKeySequenceWidget::setClearButtonShow(QKeySequenceWidget::ClearButtonShow show) { d_ptr->showClearButton = show; d_ptr->updateView(); } /*! Return mode of clear button dosplay. \param show Display mode of clear button (NoShow, ShowLeft or ShorRight) \sa setClearButtonShow */ QKeySequenceWidget::ClearButtonShow QKeySequenceWidget::clearButtonShow() const { return static_cast(d_ptr->showClearButton); } /*! Set the key sequence. \param key Key sequence \sa clearKeySequence */ void QKeySequenceWidget::setKeySequence(const QKeySequence& key) { if (d_ptr->isRecording == false) { d_ptr->oldSequence = d_ptr->currentSequence; } d_ptr->doneRecording(); d_ptr->currentSequence = key; d_ptr->doneRecording(); } /*! Get current key sequence. \return Current key sequence \sa setKeySequence \sa clearKeySequence */ QKeySequence QKeySequenceWidget::keySequence() const { return d_ptr->currentSequence; } /*! Clear key sequence. \sa setKeySequence */ void QKeySequenceWidget::clearKeySequence() { setKeySequence(QKeySequence()); } // slot for capture key sequence starting (private) void QKeySequenceWidget::captureKeySequence() { d_ptr->startRecording(); } /*! Set string for display when key sequence is undefined. \param text Text string \sa noneText */ void QKeySequenceWidget::setNoneText(const QString text) { d_ptr->noneSequenceText = text; d_ptr->updateDisplayShortcut(); } /*! Get string for display when key sequence is undefined. \return Text string \sa setNoneText */ QString QKeySequenceWidget::noneText() const { return d_ptr->noneSequenceText; } /*! Set custom icon for clear buttom. \param icon QIcon object \sa clearButtonIcon */ void QKeySequenceWidget::setClearButtonIcon(const QIcon &icon) { d_ptr->clearButton->setIcon(icon); } /*! Get clear buttom icon. \return QIcon object \sa setClearButtonIcon */ QIcon QKeySequenceWidget::clearButtonIcon() const { return d_ptr->clearButton->icon(); } // connection internal signals & slots void QKeySequenceWidget::_connectingSlots() { // connect signals to slots connect(d_ptr->clearButton, SIGNAL(clicked()), this, SLOT(clearKeySequence())); connect(&d_ptr->modifierlessTimeout, SIGNAL(timeout()), this, SLOT(doneRecording())); connect(d_func()->shortcutButton, SIGNAL(clicked()), this, SLOT(captureKeySequence())); } // Private class implementation QKeySequenceWidgetPrivate::QKeySequenceWidgetPrivate() : layout(NULL), clearButton(NULL), shortcutButton(NULL) { Q_Q(QKeySequenceWidget); Q_UNUSED(q); } QKeySequenceWidgetPrivate::~QKeySequenceWidgetPrivate() { } void QKeySequenceWidgetPrivate::init(const QKeySequence keySeq, const QString noneStr) { Q_Q(QKeySequenceWidget); Q_UNUSED(q); layout = new QHBoxLayout(q_func()); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(1); clearButton = new QToolButton(q_func()); clearButton->setText("x"); layout->addWidget(clearButton); shortcutButton = new QShortcutButton(this, q_func()); if (noneStr.isNull() == true) { noneSequenceText = "..."; } else { noneSequenceText = noneStr; } q_ptr->clearKeySequence(); currentSequence = keySeq; shortcutButton->setFocusPolicy(Qt::StrongFocus); layout->addWidget(shortcutButton); showClearButton = QKeySequenceWidget::ShowRight; clearButton->setIcon(QIcon::fromTheme("dialog-cancel", QIcon(":/icons/dialog-cancel.png"))); // unfocused clear button afyer created (small hack) clearButton->setFocusPolicy(Qt::NoFocus); // update ui updateDisplayShortcut(); updateView(); } // set tooltip only for seqyence button void QKeySequenceWidgetPrivate::setToolTip(const QString &tip) { shortcutButton->setToolTip(tip); clearButton->setToolTip(""); } // update the location of widgets void QKeySequenceWidgetPrivate::updateView() { qDebug() << "update view "; switch(showClearButton) { case QKeySequenceWidget::ShowLeft: clearButton->setVisible(true); layout->setDirection(QBoxLayout::LeftToRight); break; case QKeySequenceWidget::ShowRight: clearButton->setVisible(true); layout->setDirection(QBoxLayout::RightToLeft); break; case QKeySequenceWidget::NoShow: clearButton->setVisible(false); break; default: layout->setDirection(QBoxLayout::LeftToRight); } } void QKeySequenceWidgetPrivate::startRecording() { numKey = 0; modifierKeys = 0; oldSequence = currentSequence; currentSequence = QKeySequence(); isRecording = true; shortcutButton->setDown(true); shortcutButton->grabKeyboard(); if (!QWidget::keyboardGrabber()) { qWarning() << "Failed to grab the keyboard! Most likely qt's nograb option is active"; } // update Shortcut display updateDisplayShortcut(); } void QKeySequenceWidgetPrivate::doneRecording() { modifierlessTimeout.stop(); isRecording = false; shortcutButton->releaseKeyboard(); shortcutButton->setDown(false); // if sequence is not changed if (currentSequence == oldSequence) { // update Shortcut display updateDisplayShortcut(); return; } // key sequnce is changed emit q_ptr->keySequenceChanged(currentSequence); // update Shortcut display updateDisplayShortcut(); } inline void QKeySequenceWidgetPrivate::cancelRecording() { currentSequence = oldSequence; doneRecording(); } inline void QKeySequenceWidgetPrivate::controlModifierlessTimout() { if (numKey != 0 && !modifierKeys) { // No modifier key pressed currently. Start the timout modifierlessTimeout.start(600); } else { // A modifier is pressed. Stop the timeout modifierlessTimeout.stop(); } } inline void QKeySequenceWidgetPrivate::keyNotSupported() { Q_EMIT q_ptr->keyNotSupported(); } void QKeySequenceWidgetPrivate::updateDisplayShortcut() { // empty string if no non-modifier was pressed QString str = currentSequence.toString(QKeySequence::NativeText); str.replace('&', QLatin1String("&&")); // TODO -- check it if (isRecording == true) { if (modifierKeys) { if (str.isEmpty() == false) str.append(","); if ((modifierKeys & Qt::META) ) str += "Meta + "; if ((modifierKeys & Qt::CTRL) ) str += "Ctrl + "; if ((modifierKeys & Qt::ALT) ) str += "Alt + "; if ((modifierKeys & Qt::SHIFT) ) str += "Shift + "; } // make it clear that input is still going on str.append("..."); } // if is noting if (str.isEmpty() == true) { str = noneSequenceText; } shortcutButton->setText(str); } // QKeySequenceButton implementation QSize QShortcutButton::sizeHint() const { return QPushButton::sizeHint(); } bool QShortcutButton::event(QEvent *e) { if (d->isRecording == true && e->type() == QEvent::KeyPress) { keyPressEvent(static_cast(e)); return true; } if (d->isRecording && e->type() == QEvent::ShortcutOverride) { e->accept(); return true; } if (d->isRecording == true && e->type() == QEvent::FocusOut) { d->cancelRecording(); return true; } return QPushButton::event(e); } void QShortcutButton::keyPressEvent(QKeyEvent *keyEvent) { qDebug() << "key pressed"; int keyQt = keyEvent->key(); // Qt sometimes returns garbage keycodes, I observed -1, // if it doesn't know a key. // We cannot do anything useful with those (several keys have -1, // indistinguishable) // and QKeySequence.toString() will also yield a garbage string. if (keyQt == -1) { // keu moy supported in Qt d->cancelRecording(); d->keyNotSupported(); } //get modifiers key uint newModifiers = keyEvent->modifiers() & (Qt::SHIFT | Qt::CTRL | Qt::ALT | Qt::META); // block autostart capturing on key_return or key space press if (d->isRecording == false && (keyQt == Qt::Key_Return || keyQt == Qt::Key_Space)) { return; } // We get events even if recording isn't active. if (d->isRecording == false) { return QPushButton::keyPressEvent(keyEvent); } keyEvent->accept(); d->modifierKeys = newModifiers; // switching key type switch(keyQt) { case Qt::Key_AltGr: //or else we get unicode salad return; case Qt::Key_Shift: case Qt::Key_Control: case Qt::Key_Alt: case Qt::Key_Meta: case Qt::Key_Menu: //unused (yes, but why?) // TODO - check it key d->controlModifierlessTimout(); d->updateDisplayShortcut(); break; default: { } // We now have a valid key press. if (keyQt) { if ((keyQt == Qt::Key_Backtab) && (d->modifierKeys & Qt::SHIFT)) { keyQt = Qt::Key_Tab | d->modifierKeys; } else //if (d->isShiftAsModifierAllowed(keyQt)) { keyQt |= d->modifierKeys; } if (d->numKey == 0) { d->currentSequence = QKeySequence(keyQt); } d->numKey++; // increment nuber of pressed keys if (d->numKey >= 4) { d->doneRecording(); return; } d->controlModifierlessTimout(); d->updateDisplayShortcut(); } } } void QShortcutButton::keyReleaseEvent(QKeyEvent *keyEvent) { qDebug() << "key released"; if (keyEvent->key() == -1) { // ignore garbage, see keyPressEvent() return; } // if not recording mode if (d->isRecording == false) { return QPushButton::keyReleaseEvent(keyEvent); } keyEvent->accept(); uint newModifiers = keyEvent->modifiers() & (Qt::SHIFT | Qt::CTRL | Qt::ALT | Qt::META); // if a modifier that belongs to the shortcut was released... if ((newModifiers & d->modifierKeys) < d->modifierKeys) { d->modifierKeys = newModifiers; d->controlModifierlessTimout(); d->updateDisplayShortcut(); } } pvanek-qlipper-d7b29d0/qkeysequencewidget/qkeysequencewidget.h000066400000000000000000000111361516742713700250710ustar00rootroot00000000000000/****************************************************************************** Copyright (c) 2010, Artem Galichkin All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #ifndef QKEYSEQUENCEWIDGET_H #define QKEYSEQUENCEWIDGET_H #include "qkeysequencewidget_p.h" #include #include class QKeySequenceWidgetPrivate; /*! \class QKeySequenceWidget \brief The QKeySequenceWidget is a widget to input a QKeySequence. This widget lets the user choose a QKeySequence, which is usually used as a shortcut key. The recording is initiated by calling captureKeySequence() or the user clicking into the widget. \code // create new QKeySequenceWidget with empty sequence QKeySequenceWidget *keyWidget = new QKeySequenceWidget; // Set sequence as "Ctrl+Alt+Space" keyWidget->setJeySequence(QKeySequence("Ctrl+Alt+Space")); // set clear button position is left setClearButtonShow(QKeySequenceWidget::ShowLeft); // set cutom clear button icon setClearButtonIcon(QIcon("/path/to/icon.png")); // connecting keySequenceChanged signal to slot connect(keyWidget, SIGNAL(keySequenceChanged(QKeySequence)), this, SLOT(slotKeySequenceChanged(QKeySequence))); \endcode */ class QKeySequenceWidget : public QWidget { Q_OBJECT Q_DECLARE_PRIVATE(QKeySequenceWidget); Q_PRIVATE_SLOT(d_func(), void doneRecording()) Q_PROPERTY(QKeySequence keySequence READ keySequence WRITE setKeySequence) Q_PROPERTY(QKeySequenceWidget::ClearButtonShow clearButton READ clearButtonShow WRITE setClearButtonShow) Q_PROPERTY(QString noneText READ noneText WRITE setNoneText) Q_PROPERTY(QIcon clearButtonIcon READ clearButtonIcon WRITE setClearButtonIcon) private: QKeySequenceWidgetPrivate * const d_ptr; void _connectingSlots(); private Q_SLOTS: void captureKeySequence(); public: explicit QKeySequenceWidget(QWidget *parent = 0); explicit QKeySequenceWidget(QKeySequence seq, QWidget *parent = 0); explicit QKeySequenceWidget(QString noneString, QWidget *parent = 0); explicit QKeySequenceWidget(QKeySequence seq, QString noneString, QWidget *parent = 0); virtual ~QKeySequenceWidget(); QSize sizeHint() const; void setToolTip(const QString &tip); QKeySequence keySequence() const; QString noneText() const; QIcon clearButtonIcon() const; /*! \brief Modes of sohow ClearButton */ enum ClearButton { NoShow = 0x00, /**< Hide ClearButton */ ShowLeft = 0x01, /**< ClearButton isow is left */ ShowRight = 0x02 /**< ClearButton isow is left */ }; Q_DECLARE_FLAGS(ClearButtonShow, ClearButton); Q_FLAGS(ClearButtonShow) QKeySequenceWidget::ClearButtonShow clearButtonShow() const; Q_SIGNALS: void keySequenceChanged(const QKeySequence &seq); void keyNotSupported(); public Q_SLOTS: void setKeySequence(const QKeySequence &key); void clearKeySequence(); void setNoneText(const QString text); void setClearButtonIcon(const QIcon& icon); void setClearButtonShow(QKeySequenceWidget::ClearButtonShow show); }; #endif // QKEYSEQUENCEWIDGET_H pvanek-qlipper-d7b29d0/qkeysequencewidget/qkeysequencewidget_p.h000066400000000000000000000073031516742713700254110ustar00rootroot00000000000000/****************************************************************************** Copyright (c) 2010, Artem Galichkin All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #ifndef QKEYSEQUENCEWIDGET_P_H #define QKEYSEQUENCEWIDGET_P_H #include #include #include #include #include #include #include #include "qkeysequencewidget.h" class QShortcutButton; class QKeySequenceWidget; class QKeySequenceWidgetPrivate // : public QObject { //Q_OBJECT Q_DECLARE_PUBLIC(QKeySequenceWidget); public: QKeySequenceWidget * q_ptr; QKeySequenceWidgetPrivate(); virtual ~QKeySequenceWidgetPrivate(); void init(const QKeySequence keySeq, const QString noneStr); void updateView(); void startRecording(); void doneRecording(); inline void cancelRecording(); inline void controlModifierlessTimout(); inline void keyNotSupported(); void updateDisplayShortcut(); // members QKeySequence currentSequence; QKeySequence oldSequence; QString noneSequenceText; QTimer modifierlessTimeout; quint32 numKey; quint32 modifierKeys; void setToolTip(const QString& tip); QHBoxLayout *layout; QToolButton *clearButton; QShortcutButton *shortcutButton; int showClearButton; bool isRecording; }; class QShortcutButton : public QPushButton { Q_OBJECT public: explicit QShortcutButton(QKeySequenceWidgetPrivate *p, QWidget *parent = 0) : QPushButton(parent) , d(p) { qDebug() << "qShortcut button Create"; qDebug() << "parent----" << parent; qDebug() << "visible " << isVisible(); setMinimumWidth(QPushButton::minimumWidth()); QPushButton::setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); } virtual ~QShortcutButton() { qDebug() << "qShortcut button delete"; } virtual QSize sizeHint() const; protected: // Reimplemented for internal reasons. virtual bool event(QEvent *e); virtual void keyPressEvent(QKeyEvent *keyEvent); virtual void keyReleaseEvent(QKeyEvent *keyEvent); private: QKeySequenceWidgetPrivate * const d; }; #endif // QKEYSEQUENCEWIDGET_P_H pvanek-qlipper-d7b29d0/qlipper.desktop000066400000000000000000000034241516742713700201540ustar00rootroot00000000000000[Desktop Entry] Terminal=false TryExec=qlipper Exec=qlipper Icon=qlipper Type=Application Categories=Qt;Utility; StartupNotify=false Name=Qlipper Name[ca]=Qlipper Name[da]=Qlipper Name[fr]=Qlipper Name[it]=Qlipper Name[ja]=Qlipper Name[lt]=Qlipper Name[pt]=Qlipper Name[sr]=Кјулипер Name[sr@ijekavian]=Кјулипер Name[sr@ijekavianlatin]=Kjuliper Name[sr@latin]=Kjuliper Name[sv]=Qlipper GenericName=Clipboard Tool GenericName[ca]=Eina de porta-retalls GenericName[da]=Udklipsholderværktøj GenericName[de]=Zwischenablage GenericName[fr]=Presse-papiers GenericName[it]=Strumento per gestire gli appunti GenericName[ja]=クリップボード ツール GenericName[lt]=Iškarpinės įrankis GenericName[pt]=Ferramenta da área de transferência GenericName[sr]=Алатка за клипборд GenericName[sr@ijekavian]=Алатка за клипборд GenericName[sr@ijekavianlatin]=Alatka za klipbord GenericName[sr@latin]=Alatka za klipbord GenericName[sv]=Urklippshanterare Comment=Clipboard history tool Comment[ca]=Eina de l'historial del porta-retalls Comment[da]=Historikværktøj for udklipsholder Comment[de]=Anwendung zur Handhabung der Zwischenablage Comment[fr]=Un outil d'historique du presse-papiers Comment[it]=Strumento per la cronologia degli appunti Comment[ja]=クリップボード履歴のツールです Comment[lt]=Iškarpinės istorijos įrankis Comment[pt]=Ferramenta de histórico da área de transferência Comment[sr]=Алатка за историјат исецања и налепљивања Comment[sr@ijekavian]=Алатка за историјат исецања и налепљивања Comment[sr@ijekavianlatin]=Alatka za istorijat isecanja i nalepljivanja Comment[sr@latin]=Alatka za istorijat isecanja i nalepljivanja Comment[sv]=Historikverktyg urklipp pvanek-qlipper-d7b29d0/qmenuview/000077500000000000000000000000001516742713700171225ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/qmenuview/qmenuview.cpp000066400000000000000000000137331516742713700216550ustar00rootroot00000000000000/* XINX Copyright (C) 2007-2011 by Ulrich Van Den Hekke xinx@shadoware.org This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful. but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* * This class is inspired from the Nokia class MenuModel, used in the browser * application in demos. */ // Xinx header #include "qmenuview_p.h" Q_DECLARE_METATYPE(QModelIndex); /* QMenuViewPrivate */ QMenuViewPrivate::QMenuViewPrivate(QMenuView* menu) : _menu(menu) { } QMenuViewPrivate::~QMenuViewPrivate() { } QAction * QMenuViewPrivate::makeAction(const QModelIndex &index) { QIcon icon = qvariant_cast(index.data(Qt::DecorationRole)); QAction * action = new QAction(icon, index.data().toString(), this); action->setEnabled(index.flags().testFlag(Qt::ItemIsEnabled)); // improvements for Qlipper (petr vanek action->setFont(qvariant_cast(index.data(Qt::FontRole))); action->setToolTip(index.data(Qt::ToolTipRole).toString()); // end of qlipper improvements QVariant v; v.setValue(index); action->setData(v); return action; } void QMenuViewPrivate::triggered(QAction *action) { QVariant v = action->data(); if (v.canConvert()) { QModelIndex idx = qvariant_cast(v); emit _menu->triggered(idx); } } void QMenuViewPrivate::hovered(QAction *action) { QVariant v = action->data(); if (v.canConvert()) { QModelIndex idx = qvariant_cast(v); QString hoveredString = idx.data(Qt::StatusTipRole).toString(); if (!hoveredString.isEmpty()) emit _menu->hovered(hoveredString); } } void QMenuViewPrivate::aboutToShow() { QMenu * menu = qobject_cast(sender()); if (menu) { QVariant v = menu->menuAction()->data(); if (v.canConvert()) { QModelIndex idx = qvariant_cast(v); _menu->createMenu(idx, menu, menu); disconnect(menu, SIGNAL(aboutToShow()), this, SLOT(aboutToShow())); return; } } _menu->clear(); if (_menu->prePopulated()) _menu->addSeparator(); _menu->createMenu(m_root, _menu, _menu); _menu->postPopulated(); } /* QMenuView */ /*! * \ingroup Components * \class QMenuView * \since 0.9.0.0 * * \brief The QMenuView provides a menu based view on a QAbstractItemModel class. * * \bc 0.10.0.0 * * This class is used to transform a hierarchical model based on the class * QAbstractItemModel into a menu. It can be used to create an action menu, history, * or snipets menu. * * \image html qmenuview.png * \image latex qmenuview.png * * When the model is defined, the structure of the menu is automatically generated. This * class ignores call to QAbstractItemModel::beginInsertRows() and QAbstractItemModel::endInsertRows(). * Menu is generated when the user opens it. */ /*! * \brief Creates the new menu view based on a QMenu object. * \param parent The parent object of the menu. */ QMenuView::QMenuView(QWidget * parent) : QMenu(parent), d(new QMenuViewPrivate(this)) { connect(this, SIGNAL(triggered(QAction*)), d.data(), SLOT(triggered(QAction*))); connect(this, SIGNAL(hovered(QAction*)), d.data(), SLOT(hovered(QAction*))); connect(this, SIGNAL(aboutToShow()), d.data(), SLOT(aboutToShow())); } //! Destroy the menu. QMenuView::~QMenuView() { setModel(0); } /*! * \fn void QMenuView::hovered(const QString &text) const * \brief The signal when a menu action is highlighted. * * \p text is the Qt::StatusTipRole of the index that caused the signal to be emitted. * * Often this is used to update status information. * * \sa triggered() */ /*! * \fn void QMenuView::triggered(const QModelIndex & index) const * \brief This signal is emitted when an action in this menu is triggered. * * \p index is the index's action that caused the signal to be emitted. * * \sa hovered() */ //! Add any actions before the tree, return true if any actions are added. bool QMenuView::prePopulated() { return false; } //! Add any actions after the tree void QMenuView::postPopulated() { } /*! * \brief Set the new model to \p model. * \param model The new model to use for the creation of menus. */ void QMenuView::setModel(QAbstractItemModel * model) { d->m_model = model; } /*! * \brief Return the current model of the menu. */ QAbstractItemModel * QMenuView::model() const { return d->m_model; } /*! * \brief Change the root index to \p index. * * This can be used to show only a part of the QAbstractItemModel. * \param index The index to use to show the menu. if QModelIndex(), all the model is show. */ void QMenuView::setRootIndex(const QModelIndex & index) { d->m_root = index; } /*! * \brief Returns the current root index. * * Default root index is QModelIndex() */ QModelIndex QMenuView::rootIndex() const { return d->m_root; } //! Puts all of the children of parent into menu void QMenuView::createMenu(const QModelIndex &parent, QMenu *parentMenu, QMenu *menu) { if (! menu) { QIcon icon = qvariant_cast(parent.data(Qt::DecorationRole)); QVariant v; v.setValue(parent); menu = new QMenu(parent.data().toString(), this); menu->setIcon(icon); parentMenu->addMenu(menu); menu->menuAction()->setData(v); menu->setEnabled(parent.flags().testFlag(Qt::ItemIsEnabled)); connect(menu, SIGNAL(aboutToShow()), d.data(), SLOT(aboutToShow())); return; } int end = d->m_model->rowCount(parent); for (int i = 0; i < end; ++i) { QModelIndex idx = d->m_model->index(i, 0, parent); if (d->m_model->hasChildren(idx)) { createMenu(idx, menu); } else { menu->addAction(d->makeAction(idx)); } } } pvanek-qlipper-d7b29d0/qmenuview/qmenuview.h000066400000000000000000000031451516742713700213160ustar00rootroot00000000000000/* XINX Copyright (C) 2007-2011 by Ulrich Van Den Hekke xinx@shadoware.org This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful. but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #pragma once #ifndef _QMENUVIEW_H_ #define _QMENUVIEW_H_ // Qt header #include #include //#include #define COMPONENTSEXPORT class QMenuViewPrivate; class COMPONENTSEXPORT QMenuView : public QMenu { Q_OBJECT public: QMenuView(QWidget * parent = 0); virtual ~QMenuView(); virtual void setModel(QAbstractItemModel * model); QAbstractItemModel * model() const; virtual void setRootIndex(const QModelIndex & index); QModelIndex rootIndex() const; protected: virtual bool prePopulated(); virtual void postPopulated(); void createMenu(const QModelIndex &parent, QMenu *parentMenu = 0, QMenu *menu = 0); signals: void hovered(const QString &text) const; void triggered(const QModelIndex & index) const; private: QScopedPointer d; friend class QMenuViewPrivate; }; #endif /* _QMENUVIEW_H_ */ pvanek-qlipper-d7b29d0/qmenuview/qmenuview_p.h000066400000000000000000000024021516742713700216300ustar00rootroot00000000000000/* XINX Copyright (C) 2007-2011 by Ulrich Van Den Hekke xinx@shadoware.org This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful. but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #pragma once #ifndef _QMENUVIEW_P_H_ #define _QMENUVIEW_P_H_ // Qt header #include #include #include "qmenuview.h" //#include //! \private class QMenuViewPrivate : public QObject { Q_OBJECT public: QMenuViewPrivate(QMenuView * menu); virtual ~QMenuViewPrivate(); QAction *makeAction(const QModelIndex &index); QMenuView * _menu; QAbstractItemModel * m_model; QPersistentModelIndex m_root; public slots: void aboutToShow(); void triggered(QAction *action); void hovered(QAction *action); }; #endif /* _QMENUVIEW_P_H_ */ pvanek-qlipper-d7b29d0/qxt/000077500000000000000000000000001516742713700157165ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/qxt/qxtglobal.h000066400000000000000000000156171516742713700200760ustar00rootroot00000000000000 /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #ifndef QXTGLOBAL_H #define QXTGLOBAL_H #include #define QXT_VERSION 0x000700 #define QXT_VERSION_STR "0.7.0" //--------------------------global macros------------------------------ #ifndef QXT_NO_MACROS #ifndef _countof #define _countof(x) (sizeof(x)/sizeof(*x)) #endif #endif // QXT_NO_MACROS //--------------------------export macros------------------------------ #define QXT_DLLEXPORT DO_NOT_USE_THIS_ANYMORE #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_CORE) # define QXT_CORE_EXPORT Q_DECL_EXPORT # else # define QXT_CORE_EXPORT Q_DECL_IMPORT # endif #else # define QXT_CORE_EXPORT #endif // BUILD_QXT_CORE #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_GUI) # define QXT_GUI_EXPORT Q_DECL_EXPORT # else # define QXT_GUI_EXPORT Q_DECL_IMPORT # endif #else # define QXT_GUI_EXPORT #endif // BUILD_QXT_GUI #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_NETWORK) # define QXT_NETWORK_EXPORT Q_DECL_EXPORT # else # define QXT_NETWORK_EXPORT Q_DECL_IMPORT # endif #else # define QXT_NETWORK_EXPORT #endif // BUILD_QXT_NETWORK #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_SQL) # define QXT_SQL_EXPORT Q_DECL_EXPORT # else # define QXT_SQL_EXPORT Q_DECL_IMPORT # endif #else # define QXT_SQL_EXPORT #endif // BUILD_QXT_SQL #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_WEB) # define QXT_WEB_EXPORT Q_DECL_EXPORT # else # define QXT_WEB_EXPORT Q_DECL_IMPORT # endif #else # define QXT_WEB_EXPORT #endif // BUILD_QXT_WEB #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_BERKELEY) # define QXT_BERKELEY_EXPORT Q_DECL_EXPORT # else # define QXT_BERKELEY_EXPORT Q_DECL_IMPORT # endif #else # define QXT_BERKELEY_EXPORT #endif // BUILD_QXT_BERKELEY #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_ZEROCONF) # define QXT_ZEROCONF_EXPORT Q_DECL_EXPORT # else # define QXT_ZEROCONF_EXPORT Q_DECL_IMPORT # endif #else # define QXT_ZEROCONF_EXPORT #endif // QXT_ZEROCONF_EXPORT #if defined(BUILD_QXT_CORE) || defined(BUILD_QXT_GUI) || defined(BUILD_QXT_SQL) || defined(BUILD_QXT_NETWORK) || defined(BUILD_QXT_WEB) || defined(BUILD_QXT_BERKELEY) || defined(BUILD_QXT_ZEROCONF) # define BUILD_QXT #endif QXT_CORE_EXPORT const char* qxtVersion(); #ifndef QT_BEGIN_NAMESPACE #define QT_BEGIN_NAMESPACE #endif #ifndef QT_END_NAMESPACE #define QT_END_NAMESPACE #endif #ifndef QT_FORWARD_DECLARE_CLASS #define QT_FORWARD_DECLARE_CLASS(Class) class Class; #endif /**************************************************************************** ** This file is derived from code bearing the following notice: ** The sole author of this file, Adam Higerd, has explicitly disclaimed all ** copyright interest and protection for the content within. This file has ** been placed in the public domain according to United States copyright ** statute and case law. In jurisdictions where this public domain dedication ** is not legally recognized, anyone who receives a copy of this file is ** permitted to use, modify, duplicate, and redistribute this file, in whole ** or in part, with no restrictions or conditions. In these jurisdictions, ** this file shall be copyright (C) 2006-2008 by Adam Higerd. ****************************************************************************/ #define QXT_DECLARE_PRIVATE(PUB) friend class PUB##Private; QxtPrivateInterface qxt_d; #define QXT_DECLARE_PUBLIC(PUB) friend class PUB; #define QXT_INIT_PRIVATE(PUB) qxt_d.setPublic(this); #define QXT_D(PUB) PUB##Private& d = qxt_d() #define QXT_P(PUB) PUB& p = qxt_p() template class QxtPrivate { public: virtual ~QxtPrivate() {} inline void QXT_setPublic(PUB* pub) { qxt_p_ptr = pub; } protected: inline PUB& qxt_p() { return *qxt_p_ptr; } inline const PUB& qxt_p() const { return *qxt_p_ptr; } inline PUB* qxt_ptr() { return qxt_p_ptr; } inline const PUB* qxt_ptr() const { return qxt_p_ptr; } private: PUB* qxt_p_ptr; }; template class QxtPrivateInterface { friend class QxtPrivate; public: QxtPrivateInterface() { pvt = new PVT; } ~QxtPrivateInterface() { delete pvt; } inline void setPublic(PUB* pub) { pvt->QXT_setPublic(pub); } inline PVT& operator()() { return *static_cast(pvt); } inline const PVT& operator()() const { return *static_cast(pvt); } inline PVT * operator->() { return static_cast(pvt); } inline const PVT * operator->() const { return static_cast(pvt); } private: QxtPrivateInterface(const QxtPrivateInterface&) { } QxtPrivateInterface& operator=(const QxtPrivateInterface&) { } QxtPrivate* pvt; }; #endif // QXT_GLOBAL pvanek-qlipper-d7b29d0/qxt/qxtglobalshortcut.cpp000066400000000000000000000160121516742713700222130ustar00rootroot00000000000000#include "qxtglobalshortcut.h" /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include "qxtglobalshortcut_p.h" #include #include #ifndef Q_OS_MAC int QxtGlobalShortcutPrivate::ref = 0; #endif // Q_OS_MAC QHash, QxtGlobalShortcut*> QxtGlobalShortcutPrivate::shortcuts; QxtGlobalShortcutPrivate::QxtGlobalShortcutPrivate() : enabled(true) { #ifndef Q_OS_MAC if (ref == 0) { QAbstractEventDispatcher::instance()->installNativeEventFilter(this); } ++ref; #endif // Q_OS_MAC } QxtGlobalShortcutPrivate::~QxtGlobalShortcutPrivate() { #ifndef Q_OS_MAC --ref; if (ref == 0) { QAbstractEventDispatcher *ed = QAbstractEventDispatcher::instance(); if (ed != 0) { ed->removeNativeEventFilter(this); } } #endif // Q_OS_MAC } bool QxtGlobalShortcutPrivate::setShortcut(const QKeySequence& shortcut) { shortcutCombination = shortcut.isEmpty() ? QKeyCombination{} : shortcut[0]; const quint32 nativeKey = nativeKeycode(shortcutCombination.key()); const quint32 nativeMods = nativeModifiers(shortcutCombination.keyboardModifiers()); const bool res = registerShortcut(nativeKey, nativeMods); if (res) shortcuts.insert(qMakePair(nativeKey, nativeMods), &qxt_p()); else qWarning() << "QxtGlobalShortcut failed to register:" << QKeySequence(shortcutCombination).toString(); return res; } bool QxtGlobalShortcutPrivate::unsetShortcut() { bool res = false; const quint32 nativeKey = nativeKeycode(shortcutCombination.key()); const quint32 nativeMods = nativeModifiers(shortcutCombination.keyboardModifiers()); if (shortcuts.value(qMakePair(nativeKey, nativeMods)) == &qxt_p()) res = unregisterShortcut(nativeKey, nativeMods); if (res) shortcuts.remove(qMakePair(nativeKey, nativeMods)); else qWarning() << "QxtGlobalShortcut failed to unregister:" << QKeySequence(shortcutCombination).toString(); shortcutCombination = QKeyCombination{}; return res; } void QxtGlobalShortcutPrivate::activateShortcut(quint32 nativeKey, quint32 nativeMods) { QxtGlobalShortcut* shortcut = shortcuts.value(qMakePair(nativeKey, nativeMods)); if (shortcut && shortcut->isEnabled()) emit shortcut->activated(); } /*! \class QxtGlobalShortcut \inmodule QxtWidgets \brief The QxtGlobalShortcut class provides a global shortcut aka "hotkey". A global shortcut triggers even if the application is not active. This makes it easy to implement applications that react to certain shortcuts still if some other application is active or if the application is for example minimized to the system tray. Example usage: \code QxtGlobalShortcut* shortcut = new QxtGlobalShortcut(window); connect(shortcut, SIGNAL(activated()), window, SLOT(toggleVisibility())); shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12")); \endcode \bold {Note:} Since Qxt 0.6 QxtGlobalShortcut no more requires QxtApplication. */ /*! \fn QxtGlobalShortcut::activated() This signal is emitted when the user types the shortcut's key sequence. \sa shortcut */ /*! Constructs a new QxtGlobalShortcut with \a parent. */ QxtGlobalShortcut::QxtGlobalShortcut(QObject* parent) : QObject(parent) { QXT_INIT_PRIVATE(QxtGlobalShortcut); } /*! Constructs a new QxtGlobalShortcut with \a shortcut and \a parent. */ QxtGlobalShortcut::QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent) : QObject(parent) { QXT_INIT_PRIVATE(QxtGlobalShortcut); setShortcut(shortcut); } /*! Destructs the QxtGlobalShortcut. */ QxtGlobalShortcut::~QxtGlobalShortcut() { if (qxt_d().shortcutCombination != QKeyCombination{}) qxt_d().unsetShortcut(); } /*! \property QxtGlobalShortcut::shortcut \brief the shortcut key sequence \bold {Note:} Notice that corresponding key press and release events are not delivered for registered global shortcuts even if they are disabled. Also, comma separated key sequences are not supported. Only the first part is used: \code qxtShortcut->setShortcut(QKeySequence("Ctrl+Alt+A,Ctrl+Alt+B")); Q_ASSERT(qxtShortcut->shortcut() == QKeySequence("Ctrl+Alt+A")); \endcode */ QKeySequence QxtGlobalShortcut::shortcut() const { return QKeySequence(qxt_d().shortcutCombination); } bool QxtGlobalShortcut::setShortcut(const QKeySequence& shortcut) { if (qxt_d().shortcutCombination != QKeyCombination{}) qxt_d().unsetShortcut(); return qxt_d().setShortcut(shortcut); } /*! \property QxtGlobalShortcut::enabled \brief whether the shortcut is enabled A disabled shortcut does not get activated. The default value is \c true. \sa setDisabled() */ bool QxtGlobalShortcut::isEnabled() const { return qxt_d().enabled; } void QxtGlobalShortcut::setEnabled(bool enabled) { qxt_d().enabled = enabled; } /*! Sets the shortcut \a disabled. \sa enabled */ void QxtGlobalShortcut::setDisabled(bool disabled) { qxt_d().enabled = !disabled; } pvanek-qlipper-d7b29d0/qxt/qxtglobalshortcut.h000066400000000000000000000053611516742713700216650ustar00rootroot00000000000000#ifndef QXTGLOBALSHORTCUT_H /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #define QXTGLOBALSHORTCUT_H #include "qxtglobal.h" #include #include class QxtGlobalShortcutPrivate; class /*QXT_GUI_EXPORT*/ QxtGlobalShortcut : public QObject { Q_OBJECT QXT_DECLARE_PRIVATE(QxtGlobalShortcut) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut) public: explicit QxtGlobalShortcut(QObject* parent = 0); explicit QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent = 0); virtual ~QxtGlobalShortcut(); QKeySequence shortcut() const; bool setShortcut(const QKeySequence& shortcut); bool isEnabled() const; public Q_SLOTS: void setEnabled(bool enabled = true); void setDisabled(bool disabled = true); Q_SIGNALS: void activated(); }; #endif // QXTGLOBALSHORTCUT_H pvanek-qlipper-d7b29d0/qxt/qxtglobalshortcut_mac.cpp000066400000000000000000000217051516742713700230400ustar00rootroot00000000000000#include /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include "qxtglobalshortcut_p.h" #include #include #include #include typedef QPair Identifier; static QMap keyRefs; static QHash keyIDs; static quint32 hotKeySerial = 0; static bool qxt_mac_handler_installed = false; OSStatus qxt_mac_handle_hot_key(EventHandlerCallRef nextHandler, EventRef event, void* data) { Q_UNUSED(nextHandler); Q_UNUSED(data); if (GetEventClass(event) == kEventClassKeyboard && GetEventKind(event) == kEventHotKeyPressed) { EventHotKeyID keyID; GetEventParameter(event, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(keyID), NULL, &keyID); Identifier id = keyIDs.key(keyID.id); QxtGlobalShortcutPrivate::activateShortcut(id.second, id.first); } return noErr; } quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) { quint32 native = 0; if (modifiers & Qt::ShiftModifier) native |= shiftKey; if (modifiers & Qt::ControlModifier) native |= cmdKey; if (modifiers & Qt::AltModifier) native |= optionKey; if (modifiers & Qt::MetaModifier) native |= controlKey; if (modifiers & Qt::KeypadModifier) native |= kEventKeyModifierNumLockMask; return native; } quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) { UTF16Char ch; // Constants found in NSEvent.h from AppKit.framework switch (key) { case Qt::Key_Return: return kVK_Return; case Qt::Key_Enter: return kVK_ANSI_KeypadEnter; case Qt::Key_Tab: return kVK_Tab; case Qt::Key_Space: return kVK_Space; case Qt::Key_Backspace: return kVK_Delete; case Qt::Key_Control: return kVK_Command; case Qt::Key_Shift: return kVK_Shift; case Qt::Key_CapsLock: return kVK_CapsLock; case Qt::Key_Option: return kVK_Option; case Qt::Key_Meta: return kVK_Control; case Qt::Key_F17: return kVK_F17; case Qt::Key_VolumeUp: return kVK_VolumeUp; case Qt::Key_VolumeDown: return kVK_VolumeDown; case Qt::Key_F18: return kVK_F18; case Qt::Key_F19: return kVK_F19; case Qt::Key_F20: return kVK_F20; case Qt::Key_F5: return kVK_F5; case Qt::Key_F6: return kVK_F6; case Qt::Key_F7: return kVK_F7; case Qt::Key_F3: return kVK_F3; case Qt::Key_F8: return kVK_F8; case Qt::Key_F9: return kVK_F9; case Qt::Key_F11: return kVK_F11; case Qt::Key_F13: return kVK_F13; case Qt::Key_F16: return kVK_F16; case Qt::Key_F14: return kVK_F14; case Qt::Key_F10: return kVK_F10; case Qt::Key_F12: return kVK_F12; case Qt::Key_F15: return kVK_F15; case Qt::Key_Help: return kVK_Help; case Qt::Key_Home: return kVK_Home; case Qt::Key_PageUp: return kVK_PageUp; case Qt::Key_Delete: return kVK_ForwardDelete; case Qt::Key_F4: return kVK_F4; case Qt::Key_End: return kVK_End; case Qt::Key_F2: return kVK_F2; case Qt::Key_PageDown: return kVK_PageDown; case Qt::Key_F1: return kVK_F1; case Qt::Key_Left: return kVK_LeftArrow; case Qt::Key_Right: return kVK_RightArrow; case Qt::Key_Down: return kVK_DownArrow; case Qt::Key_Up: return kVK_UpArrow; default: ; } if (key == Qt::Key_Escape) ch = 27; else if (key == Qt::Key_Return) ch = 13; else if (key == Qt::Key_Enter) ch = 3; else if (key == Qt::Key_Tab) ch = 9; else ch = key; CFDataRef currentLayoutData; TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); if (currentKeyboard == NULL) return 0; currentLayoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); CFRelease(currentKeyboard); if (currentLayoutData == NULL) return 0; UCKeyboardLayout* header = (UCKeyboardLayout*)CFDataGetBytePtr(currentLayoutData); UCKeyboardTypeHeader* table = header->keyboardTypeList; uint8_t *data = (uint8_t*)header; // God, would a little documentation for this shit kill you... for (quint32 i=0; i < header->keyboardTypeCount; i++) { UCKeyStateRecordsIndex* stateRec = 0; if (table[i].keyStateRecordsIndexOffset != 0) { stateRec = reinterpret_cast(data + table[i].keyStateRecordsIndexOffset); if (stateRec->keyStateRecordsIndexFormat != kUCKeyStateRecordsIndexFormat) stateRec = 0; } UCKeyToCharTableIndex* charTable = reinterpret_cast(data + table[i].keyToCharTableIndexOffset); if (charTable->keyToCharTableIndexFormat != kUCKeyToCharTableIndexFormat) continue; for (quint32 j=0; j < charTable->keyToCharTableCount; j++) { UCKeyOutput* keyToChar = reinterpret_cast(data + charTable->keyToCharTableOffsets[j]); for (quint32 k=0; k < charTable->keyToCharTableSize; k++) { if (keyToChar[k] & kUCKeyOutputTestForIndexMask) { long idx = keyToChar[k] & kUCKeyOutputGetIndexMask; if (stateRec && idx < stateRec->keyStateRecordCount) { UCKeyStateRecord* rec = reinterpret_cast(data + stateRec->keyStateRecordOffsets[idx]); if (rec->stateZeroCharData == ch) return k; } } else if (!(keyToChar[k] & kUCKeyOutputSequenceIndexMask) && keyToChar[k] < 0xFFFE) { if (keyToChar[k] == ch) return k; } } // for k } // for j } // for i return 0; } bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) { if (!qxt_mac_handler_installed) { EventTypeSpec t; t.eventClass = kEventClassKeyboard; t.eventKind = kEventHotKeyPressed; InstallApplicationEventHandler(&qxt_mac_handle_hot_key, 1, &t, NULL, NULL); } EventHotKeyID keyID; keyID.signature = 'cute'; keyID.id = ++hotKeySerial; EventHotKeyRef ref = 0; bool rv = !RegisterEventHotKey(nativeKey, nativeMods, keyID, GetApplicationEventTarget(), 0, &ref); if (rv) { keyIDs.insert(Identifier(nativeMods, nativeKey), keyID.id); keyRefs.insert(keyID.id, ref); } return rv; } bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) { Identifier id(nativeMods, nativeKey); if (!keyIDs.contains(id)) return false; EventHotKeyRef ref = keyRefs.take(keyIDs[id]); keyIDs.remove(id); return !UnregisterEventHotKey(ref); } pvanek-qlipper-d7b29d0/qxt/qxtglobalshortcut_p.h000066400000000000000000000061201516742713700221760ustar00rootroot00000000000000#ifndef QXTGLOBALSHORTCUT_P_H /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #define QXTGLOBALSHORTCUT_P_H #include "qxtglobalshortcut.h" #include #include #include #include class QxtGlobalShortcutPrivate : public QxtPrivate, public QAbstractNativeEventFilter { public: QXT_DECLARE_PUBLIC(QxtGlobalShortcut) QxtGlobalShortcutPrivate(); ~QxtGlobalShortcutPrivate(); bool enabled; QKeyCombination shortcutCombination; bool setShortcut(const QKeySequence& shortcut); bool unsetShortcut(); static bool error; #ifndef Q_OS_MAC static int ref; virtual bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override; #endif // Q_OS_MAC static void activateShortcut(quint32 nativeKey, quint32 nativeMods); private: static quint32 nativeKeycode(Qt::Key keycode); static quint32 nativeModifiers(Qt::KeyboardModifiers modifiers); static bool registerShortcut(quint32 nativeKey, quint32 nativeMods); static bool unregisterShortcut(quint32 nativeKey, quint32 nativeMods); static QHash, QxtGlobalShortcut*> shortcuts; }; #endif // QXTGLOBALSHORTCUT_P_H pvanek-qlipper-d7b29d0/qxt/qxtglobalshortcut_win.cpp000066400000000000000000000160411516742713700230720ustar00rootroot00000000000000#include "qxtglobalshortcut_p.h" /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType, void *message, qintptr *result) { Q_UNUSED(eventType); Q_UNUSED(result); MSG* msg = static_cast(message); if (msg->message == WM_HOTKEY) { const quint32 keycode = HIWORD(msg->lParam); const quint32 modifiers = LOWORD(msg->lParam); activateShortcut(keycode, modifiers); } return false; } quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) { // MOD_ALT, MOD_CONTROL, (MOD_KEYUP), MOD_SHIFT, MOD_WIN quint32 native = 0; if (modifiers & Qt::ShiftModifier) native |= MOD_SHIFT; if (modifiers & Qt::ControlModifier) native |= MOD_CONTROL; if (modifiers & Qt::AltModifier) native |= MOD_ALT; if (modifiers & Qt::MetaModifier) native |= MOD_WIN; // TODO: resolve these? //if (modifiers & Qt::KeypadModifier) //if (modifiers & Qt::GroupSwitchModifier) return native; } quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) { switch (key) { case Qt::Key_Escape: return VK_ESCAPE; case Qt::Key_Tab: case Qt::Key_Backtab: return VK_TAB; case Qt::Key_Backspace: return VK_BACK; case Qt::Key_Return: case Qt::Key_Enter: return VK_RETURN; case Qt::Key_Insert: return VK_INSERT; case Qt::Key_Delete: return VK_DELETE; case Qt::Key_Pause: return VK_PAUSE; case Qt::Key_Print: return VK_PRINT; case Qt::Key_Clear: return VK_CLEAR; case Qt::Key_Home: return VK_HOME; case Qt::Key_End: return VK_END; case Qt::Key_Left: return VK_LEFT; case Qt::Key_Up: return VK_UP; case Qt::Key_Right: return VK_RIGHT; case Qt::Key_Down: return VK_DOWN; case Qt::Key_PageUp: return VK_PRIOR; case Qt::Key_PageDown: return VK_NEXT; case Qt::Key_F1: return VK_F1; case Qt::Key_F2: return VK_F2; case Qt::Key_F3: return VK_F3; case Qt::Key_F4: return VK_F4; case Qt::Key_F5: return VK_F5; case Qt::Key_F6: return VK_F6; case Qt::Key_F7: return VK_F7; case Qt::Key_F8: return VK_F8; case Qt::Key_F9: return VK_F9; case Qt::Key_F10: return VK_F10; case Qt::Key_F11: return VK_F11; case Qt::Key_F12: return VK_F12; case Qt::Key_F13: return VK_F13; case Qt::Key_F14: return VK_F14; case Qt::Key_F15: return VK_F15; case Qt::Key_F16: return VK_F16; case Qt::Key_F17: return VK_F17; case Qt::Key_F18: return VK_F18; case Qt::Key_F19: return VK_F19; case Qt::Key_F20: return VK_F20; case Qt::Key_F21: return VK_F21; case Qt::Key_F22: return VK_F22; case Qt::Key_F23: return VK_F23; case Qt::Key_F24: return VK_F24; case Qt::Key_Space: return VK_SPACE; case Qt::Key_Asterisk: return VK_MULTIPLY; case Qt::Key_Plus: return VK_ADD; case Qt::Key_Comma: return VK_SEPARATOR; case Qt::Key_Minus: return VK_SUBTRACT; case Qt::Key_Slash: return VK_DIVIDE; case Qt::Key_MediaNext: return VK_MEDIA_NEXT_TRACK; case Qt::Key_MediaPrevious: return VK_MEDIA_PREV_TRACK; case Qt::Key_MediaPlay: return VK_MEDIA_PLAY_PAUSE; case Qt::Key_MediaStop: return VK_MEDIA_STOP; // couldn't find those in VK_* //case Qt::Key_MediaLast: //case Qt::Key_MediaRecord: case Qt::Key_VolumeDown: return VK_VOLUME_DOWN; case Qt::Key_VolumeUp: return VK_VOLUME_UP; case Qt::Key_VolumeMute: return VK_VOLUME_MUTE; // numbers case Qt::Key_0: case Qt::Key_1: case Qt::Key_2: case Qt::Key_3: case Qt::Key_4: case Qt::Key_5: case Qt::Key_6: case Qt::Key_7: case Qt::Key_8: case Qt::Key_9: return key; // letters case Qt::Key_A: case Qt::Key_B: case Qt::Key_C: case Qt::Key_D: case Qt::Key_E: case Qt::Key_F: case Qt::Key_G: case Qt::Key_H: case Qt::Key_I: case Qt::Key_J: case Qt::Key_K: case Qt::Key_L: case Qt::Key_M: case Qt::Key_N: case Qt::Key_O: case Qt::Key_P: case Qt::Key_Q: case Qt::Key_R: case Qt::Key_S: case Qt::Key_T: case Qt::Key_U: case Qt::Key_V: case Qt::Key_W: case Qt::Key_X: case Qt::Key_Y: case Qt::Key_Z: return key; default: return 0; } } bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) { return RegisterHotKey(0, nativeMods ^ nativeKey, nativeMods, nativeKey); } bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) { return UnregisterHotKey(0, nativeMods ^ nativeKey); } pvanek-qlipper-d7b29d0/qxt/qxtglobalshortcut_x11.cpp000066400000000000000000000161631516742713700227130ustar00rootroot00000000000000#include "qxtglobalshortcut_p.h" /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include #include #include #include #include namespace { const QVector maskModifiers = QVector() << 0 << Mod2Mask << LockMask << (Mod2Mask | LockMask); typedef int (*X11ErrorHandler)(Display *display, XErrorEvent *event); class QxtX11ErrorHandler { public: static bool error; static int qxtX11ErrorHandler(Display *display, XErrorEvent *event) { Q_UNUSED(display); switch (event->error_code) { case BadAccess: case BadValue: case BadWindow: if (event->request_code == 33 /* X_GrabKey */ || event->request_code == 34 /* X_UngrabKey */) { error = true; //TODO: //char errstr[256]; //XGetErrorText(dpy, err->error_code, errstr, 256); } } return 0; } QxtX11ErrorHandler() { error = false; m_previousErrorHandler = XSetErrorHandler(qxtX11ErrorHandler); } ~QxtX11ErrorHandler() { XSetErrorHandler(m_previousErrorHandler); } private: X11ErrorHandler m_previousErrorHandler; }; bool QxtX11ErrorHandler::error = false; class QxtX11Data { public: QxtX11Data() { QPlatformNativeInterface *native = qApp->platformNativeInterface(); void *display = native->nativeResourceForScreen(QByteArray("display"), QGuiApplication::primaryScreen()); m_display = reinterpret_cast(display); } bool isValid() { return m_display != 0; } Display *display() { Q_ASSERT(isValid()); return m_display; } Window rootWindow() { return DefaultRootWindow(display()); } bool grabKey(quint32 keycode, quint32 modifiers, Window window) { QxtX11ErrorHandler errorHandler; for (int i = 0; !errorHandler.error && i < maskModifiers.size(); ++i) { XGrabKey(display(), keycode, modifiers | maskModifiers[i], window, True, GrabModeAsync, GrabModeAsync); } if (errorHandler.error) { ungrabKey(keycode, modifiers, window); return false; } return true; } bool ungrabKey(quint32 keycode, quint32 modifiers, Window window) { QxtX11ErrorHandler errorHandler; foreach (quint32 maskMods, maskModifiers) { XUngrabKey(display(), keycode, modifiers | maskMods, window); } return !errorHandler.error; } private: Display *m_display; }; } // namespace bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType, void *message, qintptr *result) { Q_UNUSED(result); xcb_key_press_event_t *kev = 0; if (eventType == "xcb_generic_event_t") { xcb_generic_event_t *ev = static_cast(message); if ((ev->response_type & 127) == XCB_KEY_PRESS) kev = static_cast(message); } if (kev != 0) { unsigned int keycode = kev->detail; unsigned int keystate = 0; if(kev->state & XCB_MOD_MASK_1) keystate |= Mod1Mask; if(kev->state & XCB_MOD_MASK_CONTROL) keystate |= ControlMask; if(kev->state & XCB_MOD_MASK_4) keystate |= Mod4Mask; if(kev->state & XCB_MOD_MASK_SHIFT) keystate |= ShiftMask; activateShortcut(keycode, // Mod1Mask == Alt, Mod4Mask == Meta keystate & (ShiftMask | ControlMask | Mod1Mask | Mod4Mask)); } return false; } quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) { // ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask quint32 native = 0; if (modifiers & Qt::ShiftModifier) native |= ShiftMask; if (modifiers & Qt::ControlModifier) native |= ControlMask; if (modifiers & Qt::AltModifier) native |= Mod1Mask; if (modifiers & Qt::MetaModifier) native |= Mod4Mask; // TODO: resolve these? //if (modifiers & Qt::MetaModifier) //if (modifiers & Qt::KeypadModifier) //if (modifiers & Qt::GroupSwitchModifier) return native; } quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) { QxtX11Data x11; if (!x11.isValid()) return 0; KeySym keysym = XStringToKeysym(QKeySequence(key).toString().toLatin1().data()); if (keysym == NoSymbol) keysym = static_cast(key); return XKeysymToKeycode(x11.display(), keysym); } bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) { QxtX11Data x11; return x11.isValid() && x11.grabKey(nativeKey, nativeMods, x11.rootWindow()); } bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) { QxtX11Data x11; return x11.isValid() && x11.ungrabKey(nativeKey, nativeMods, x11.rootWindow()); } pvanek-qlipper-d7b29d0/src/000077500000000000000000000000001516742713700156715ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/src/clipboardwrap.cpp000066400000000000000000000045621516742713700212350ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2015 Palo Kisa This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "clipboardwrap.h" #include #include #include QScopedPointer ClipboardWrap::m_instance(0); namespace { class WorkGuard { public: WorkGuard(bool & guard) : mGuard(guard) { mGuard = false; } ~WorkGuard() { mGuard = true; } private: bool & mGuard; }; } ClipboardWrap * ClipboardWrap::Instance() { //instance can't be created in static initilization time because QApplication object doesn't exist in that time if (m_instance.isNull()) m_instance.reset(new ClipboardWrap); return m_instance.data(); } ClipboardWrap::ClipboardWrap() : m_clip(KSystemClipboard::instance()) , m_shouldEmit(true) , m_timer(new QTimer) { connect(m_clip, &KSystemClipboard::changed, this, &ClipboardWrap::onChanged); connect(m_timer.data(), &QTimer::timeout, this, &ClipboardWrap::emitChanged); //Note: the timer is here as a workaround for signal flood for primary selection // from GTK apps m_timer->setInterval(0); m_timer->setSingleShot(true); } ClipboardWrap::~ClipboardWrap() { } void ClipboardWrap::emitChanged() { emit changed(m_change); } void ClipboardWrap::onChanged(QClipboard::Mode mode) { if (m_shouldEmit) { m_change = mode; m_timer->start(); } } const QMimeData * ClipboardWrap::mimeData(QClipboard::Mode mode) { return m_clip->mimeData(mode); } void ClipboardWrap::setMimeData(QMimeData * src, QClipboard::Mode mode) { WorkGuard g(m_shouldEmit); return m_clip->setMimeData(src, mode); } pvanek-qlipper-d7b29d0/src/clipboardwrap.h000066400000000000000000000030571516742713700207000ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2015 Palo Kisa This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef CLIPBOARDWRAP_H #define CLIPBOARDWRAP_H #include #include class QTimer; class ClipboardWrap : public QObject { Q_OBJECT class Creator; friend class Creator; public: static ClipboardWrap *Instance(); ~ClipboardWrap(); const QMimeData * mimeData(QClipboard::Mode mode = QClipboard::Clipboard); void setMimeData(QMimeData * src, QClipboard::Mode mode = QClipboard::Clipboard); signals: void changed(QClipboard::Mode mode); private slots: void onChanged(QClipboard::Mode mode); void emitChanged(); private: ClipboardWrap(); static QScopedPointer m_instance; KSystemClipboard * m_clip; bool m_shouldEmit; QClipboard::Mode m_change; QScopedPointer m_timer; }; #endif // CLIPBOARDWRAP_H pvanek-qlipper-d7b29d0/src/icons/000077500000000000000000000000001516742713700170045ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/src/icons/application-exit.png000066400000000000000000000033401516742713700227640ustar00rootroot00000000000000PNG  IHDR szz pHYs^tIME kbKGDmIDATxW[lTU]ޙR>JUbĆ"HH0 ["9=g̙ kSY+͋AMSLhU:;3}}f9-I4Zuu eԨ}'O&ޡ rzM0^]h65 Pшn6\߉D]=R |֏P!|uh‘A'͜938S"? ep;MJ29g{[1b*;Vś_@ h`#obrV$WO j (_{O}E,)ą!b6=IΙqX)d>[kBaB&ۖSU,bz {w ;UD2Il/&e"RD[Oq XKY(Uasze 'WQ-lm%e1pgU1P, w׆h zZ̲yPH" Ȥ !@@{RA|ϞGDLop:>  ?͓"*8c1!oj07:,Gb /pC>Z2YDÜ.ЭWh4W{Q#(Ep%MsШ x .1=6tl,Ϧ {t ENXqitDu8>Ў0n/ye{f7vDhIENDB`pvanek-qlipper-d7b29d0/src/icons/configure.png000066400000000000000000000026521516742713700215000ustar00rootroot00000000000000PNG  IHDR szzsRGB pHYs^tIME)%FUbKGD*IDATxڽV[PSW5h"be4"2EBCx"Ũ!!ommVU:-XEZ|ؖ)Y?3k}]{a#\]gX+Tx+ߴ;_[{~6c wX]ߏALxxNdɉZVr{zLx^PkT֕exl%0j^S]x%hA%pX+˷ogx\ֻg|dm~DUH^~?NY,cPyF7}ϋ=\il*R+֌&aUm<R{kw?K&^C孺sƝϻIG; U؜ۛ-?XL}4g 5]Pռpb9 ^fZi91NHJ8%zދ|QW_gNn(; V3D{6ZDeuo?3g0w\D?6T|Yj6B:u-tK LH0W=vMFgY.򱯩9`2 hE a}ޭ5DD"kx[P^(b gJ3p8D[EIpVwOn"x׏44DigƲbQCG܎Gq#k~/q* #0m4T@&˿FX%%ӕ?]j%asj}fɢ%* ˅Bxzy".>e.zp<ٰٔqR S ((sppHa<+ ާǏ6bBD vvv* =+~ya 77BJj D$i^{Ξ'$V:h2 3T b"߅ȊD\7> r]ZT`Qkr7 t|V$$&@* "CA5-2\TkG0`^$ 'Px1[TʷhEѱSJھ}!Q{mmmAwG_:4ǩץBG?4Gv/<4\_22:cbm\| ?vٳzz~/:i*p?aDobD7oX Ũ#94hD(誊IsH!zeϞ+ka¦50QgGqr9[G߻`IWyMU Q }|Z/oX5bZu!z 0v씩3N^"w|$A~`e^߷Zx†K50KN Sywّz0kH |a-PDcZp dGUx&,c՗ZwW.;`iހKDoC؟Hy|wY 6.VIE>ùe&)XzaҊp3oVH݊wӰE(|:3B8\ɩ3Uy&-YB<| ;%n/. 4+'ct o6~=t(A>W0&.J (n,Y%Lt~]8Be)$!n7\>7tꀯTeD*Le2J5Cfu"5ʌƤI+6MgV27/c_T^+H@3T,$F-%dZxR G>藛7=Ҿi9jt6Tzrd) @5=?vWjcr1Q@[Mib( o, xYeE xMmrɰHv=@G h[ʽ w9R8Ͼxj:%ޠ\^nZ4yeD*[*,8!.LKDZ-|k J O.+Fdx+F 'O@"m𯁡\֏1F }Y }6}K'쮪Ѩ @vKL 1_蓚x.+@\[eZhI X{*+n4,ɜXr68|$R EIކs+_j~fEяnLQ쪝NDy I -HVGP- r RypE-3!6Ѱ`M/ޮ2x- -p1p`,lds&e{F<˦Y MJ!noW=zqy1x3i  GiZߚ5AEz$ , eѣ̌/K6\pClBHq r3@rj#oa:ϣIENDB`pvanek-qlipper-d7b29d0/src/icons/edit-clear-history.png000066400000000000000000000037571516742713700232360ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<lIDATxՖ{PSWDZ;ul"ʄʖqvZ,j%HE  y'7B VwE@إu)XyXP_ω ),39{~{>9s~xTi`J9i~eNC)sp37Ѡܘf 8V L8+>߹NO3u$4){)d2 | 1d2_Y,.3U6̤QGjܝ_JwXta#Ú` 8qVmfd ZR *XHd"".p,`qxyy4Bi-Ȱ߇ 7sdb?ɿCjMS|BIf-SF-h*PiPBB DUGm:ܠ;pRž^U3 Xֹ‚s&Pn d#pcmᾤtԝ5!矝 VH٭ݰkkZḇw[ 1PJy+u mCT>;ᕭ@7gA~J?4u U{Db LP ֢ *;{绬myD4nD vV}uwYySPGi.GJo>0Bn y_(1W)wVv ipb²^]lA9SB\ x0_qŏ@E4dyz]w XvgksY~tm*!/Q+z~Eq=[ 򩹪錁{"eVƒ-檠XUj9))  $ypY4G!m>PV>PQN. }{hu \6E6<}if& 9 AY3R=.6Wm?Zb֔Fq6 oM꬏6K[itt+_455 F땕mR\®HUI6Րc&O[|k>0^F6p^pU ا\GW'NlNmEPh6,-ci> Bl41boKbHl3'b8ni 6E%sT%(id-ulyݐo6\p9; )e+$$~ L6!dnJ3`wH*ɸ {|{R!m{*m a! >l_J'Z-[N(11Y?bMW5DeHtÊà@e|eZV0|ès!9- 5X!>d A}9hw|[xY7X_PE< a8jh?.c"g8G`^D&|$?wC p~8?Ǚ]7H "-F DZ RZH;aFAziL_AQ7IENDB`pvanek-qlipper-d7b29d0/src/icons/help-about.png000066400000000000000000000031441516742713700215540ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxW[lTEvv-ъHIH4<` b (1(>-.4b#.*;vwmz&)v /~ɷ3;;s䜳L#jLQB(qd00(A!Vc ƈ1KL c[JfOPɕV2 kCvTM O47&v.׼@2cKyh*M/jU0t44h`"@EO2WG8k2!#6+}pھLƁ }iXZ#@my-/ ]Bֆ;`XCJ3j:y|8GYؔ0$\!Pݳo:xtmp"x s͖!(C0zS>߈c8C)p5P B7uC""f{ԙ>ص{8Lݐ)"~ Z`0JȀ } OU8\Rͽ81w1­`9G>0xHD]~'QD-amt]Mƀ  {5f1F@XH,0"HHj-.P鬍q7 .* qxwO=3L,f:Ea41 A3;a۶4N|pZEآE:Ύ= : Rj(6opx+' c eE=eq"TܯzrFٗR6}JD*6"ޠ9iX%QWB' e EޙsdoC>}؀)&j' Ar MsUm5:T]xh>XsѪjDR|(R ׀eS E׆cF.:[F0p@ ri d^q1cDZ2ʃ0pbbpAsׅl5urw&g6ѵɅBYw 檇YpQ7? 6eO6IENDB`pvanek-qlipper-d7b29d0/src/icons/image-x-generic.png000066400000000000000000000030201516742713700224460ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs^tIME  ٲIDATXoWwfe]ѺkvX}!44II( E|?ʟJ[hD*ZV_ jIqS'm;^z3sÎ7k; UKt5wf9}s{ƧX,/,,szXt\.̌nM.9뮡XmNoihq{H3yk5ϯ:|lefDSI xY SզLVR._v&9[8 josb1XzzٳgGժv3̭qlLJ8j5=s:qjn߆nh|ɤ=#կ=x.{x[obmU c?<0 \TQk76r#v9E 1Л<{(d'l>H>i)bx3 S199yn8 ƹ`[IENDB`pvanek-qlipper-d7b29d0/src/icons/knotes.png000066400000000000000000000031571516742713700210230ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATx͗{lEǿ3{G{}-}Rʫ%F(i)DфQcbbF"ńA!A)Em"JMD "QBi)mxi!7M{7Dr @J?NE3*F <^'PCϥE u/{Fyck\HK$8vq{FVNJ@r":\ \ݵsިNΙ(5.JkO+vӗmI.(y.h&JF'@7O3v8J^$%Kfa,m\]]~߄s6$rRJzt2.A^b׋ 4u #oZKz*I (='} Ì}1eB?o˽8\Ƅ"!% ?;-"'SϴiPvd5|'ʓ"k%@=ٝ$2kBlqaS AoN{Sݎt*zNzd_{"#cLl@ y%8K,g!]`0=%fBwsqp̫QލAƝPub]h%Ƞk! ,2 n|`Z)9kpA B Nb[ Ѿ,@("d]Qy jHOpNq ]8;ѕpҀ!(!P8T@W!dp bL^<$@͇ fFJOMG J._Dü;STNuw\ N'TDNvP0X2FA )<\X@  nA +HBYS<%;} 2wդA9s6!3F'v3[NWfd٠Kl|M*ō9 8{jd Bd]*{V*>#ggVY@)b/K&",j6a8up$sOm lٌ00->p4F$'xLvO;68nbBr`En.A  9kkӶ5s "~W; C=ՄW!N=x:QT60 `k! ZwoAЄ͸'~T( v¶vL0!85KWVl`[efEEih4N+--Q s@f]ӕUv|'bqM&@fz+잰(l<{,tGEQnp8z[ZZڐ;M]Z 5-p: V0D{ AUϥGNtu$''?~\Yaaaui ,ks4wt9?cP(vwwBB >^ot>w4IENDB`pvanek-qlipper-d7b29d0/src/icons/qlipper.ico000066400000000000000000002040761516742713700211650ustar00rootroot00000000000000 ((      '3=@>2+%  -IZjnk\SJ@0)# #Bi\\\}}}IIIwlYOE=.'! /U]]]yyy333~shULC;*$ 333;ghhh|p]RH>/'   ***333@@@UUU ggg3331S XXX ym\RH!!!@---2555,<<<'FFF#]]]jjjzzz  jjU|LqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqJnGjA`6Q4LW|8HO-&8,B0H4N8S;X>\@`CcEfFhHjIlJmJnKoRxa| 'k]yj&ZgTil|W y|XwSc[rtd??? iFmv Qdd}zfrw}/555 G|v3bmTim~a*MYK a| [hb{Q ")_8"v@TX4u[l yQ1 7lG- EFEd?"www  [8 uttwR, =?>iD&Y4 tttvxxuL,|||344f@  W/ dfej?!uuu())W2 pG)SVT_=  ! wN( xxx~g<DFER0  jD&NPOT0 kD VXXZ1 pE&^``W9pH(gih_: xO(|||qtsd9 tF%{|{\6 sJ)~~~`: qF!W-c7 vvuj> g8 {zwa6 ~~~876[2 R.sB!lllc: }}}#""Y3 I%l@ ZZZ_8 V1E#g= HHH\4 R.wB zzzc9 |||333X3 I,p@ iiib9 {{{Y2 I$l@ VVV`9  W1F#h> BBB^7 V1yF#tttf= ---]6 K' rC!ccce; Z3 I%mA QQQa9  W2~G#h> <<<\4 dQ.w0un@ C~vvvU3 fg###rrr---A&'1B=ERUXBBBxC& JU)#/1.(# {    $$ -,d hoh޶ MUKXXs}n3]30Y<ݿ] BkoE k  llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll```RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR```6Fr46r⭭???????}pvanek-qlipper-d7b29d0/src/icons/qlipper.png000066400000000000000000000171221516742713700211710ustar00rootroot00000000000000PNG  IHDR>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATx]i}wϱXZjA !@!\8>$*LH[BUH*c'8e;1 $,$@$9wf:_O{glۃ+ozf{A֮]{X,.i}љt (Uy?w)G&!S M5Bqdk/3@-.PNd_+ο P>g}ˇVږb&(YFGGQڶo_6U7t>?OUښ^|e P;wn#M@'LB`8/{K/3@m:{yǏ5ME 785'r4?Lfgc5>Hd4MЅxD6ncj G|?U8fjjIc(Ml"3~8{cl]5{p(QOk5,'6T(%jj$jULKbL]4ztxfcLya_cط^cDaθUˊ`&>+"Tm3$$>-@賈b~}q߶f,|8i0HM-QIJ:܂`ɪfE3dk0ǥA7с-XJs6CX]kM(S/w0UiK>ifsDL %6Ś~@Μzjz T2>ω/Zjkt8 A_dEji.?TJ:n`:t(ff|e \!MްQ>E$3a̠E,dhv SCE-gsNP]A6wV$Rb3QF&y:ou Q mf jZ#h6 EP,axRZY}T2ꮳ\plhl4@c&(AP*M BI(Qm] `tr=*&/:i 0FFFL)od{.2cE#CT3@!s9\ȖiKA.^hJW\ FlF!j` $̙3A҂kqIϸ}rfb ĽT #R|ePz$2W{ėj n3Y$mFt+тeZ+ˠ2uGYPfNuJ\Ez|+n U{[YTy@|I IfWe/K!9g'`j8W~|A%g}1?fdQ$})adF+KE?@ ZyL࣐rSWwPpPEUޜ DcLãDGQ)뮻mذa;f2TL}gA$k7D <4&7|O9]bWRidArL8dKta/zGn:oYs̩kk޽)x_ ]ATSKl B-1jѣtD4S| fo׿|U\qUW5wi71|Ei&g _f@ ;έZ-@ϱ±ߠ'5JVPK=u=knH4v?+=0}H\A0>xqtiM6MЭQV+SLurt"Ax'Pw wPRA2 x"@!!̛7k.lIӦMOp͛wirAj7giWqX2 -K92׷Ҳe߅~3{Nf8gKXŎ9\,C>H`hwy4kL1 T[1x5tU{{{p{{;l2M>Lgp ̄aFr 4fSx&Ο?o,o4es*0:k7xc#H~P n3 jׇ~dz;t\/g/<\3qVp3@#BAaqp>@ȎW!4M}<-_fL ^0-0@&z3j~g 83qLd{h֬Y2pܫ{K.mp| fHQ_T 뭟;wϞ=Z*?3M0Z3h>^x} D%? bjp@DVe0 a9uMRJ' eqf+o +$? "L@(C483pχ:::u<~0 fp fxy|P [~@ 4,Bl$\#<i;TyKC-)Gs!.Mss._| W?#L(Y/{" غk$d*%,8xCuY)K9Ͻ?|0-\x s gM&Ҵp/{π+xZҴ6A&{0 X7Hyia(܂GsIMD[ٹ]ȧӭpV8T; + 'U5˨RAVGխ)Ieq)$ `(B9={ҮfJx?$ڭpM%}/x~ iYvt w`~jٶR(waM9~TI&n,%? MW)^|$t XD (|CΙnDuAQ\h`&{o>@ |%xQl>9 s bqU;A>LH^WP /"8bc@I `% + =SE$\ھR(L@@;`̙tiS/zh 4" 'Ыf~hܹLp~Ð~;eW% "63ljM0UxY?`բ< -$.4: ? PPs'!^reViFa|@9Ҫzy[PJ07Z0 b``Ʈ]M=*>oS(D4kw0@y|0===t]B; ZǪS 0y L "K-^{dڰS2a|k֬FpŠ@$H]?>4C%j ܪK }$ו+͹%r/̀J+SZY r!A `F0_~)bLkI4]eAn3KP6?hR"ا|s/;:dGp-ON>+~%Q)wê!Q<{cpԤ 3` ͅ+~3b::7tv.gxy,9Du!|iػԅ\~"=Kl5bP1ل0X+~~9na ;[A;IrqH'NPܐPwKşsWpMza3ȖY|e |;H[3Ϗ1(0Fd`,t[`M~o?=BMjuYq",ޥ_~B1)`sْ?2ǡ>wpwQ/S}\O`D8x1a{Sdlr 0$?gjˢwZl.E_!":= npdal/.6 W.v ;{"5Mk˗S#>}g+w1%|Cj?wϦC_ _3/(L%idx;?`6?vddrW_5,Sb~ 3İjk1ĬpnP91`Gp/3@<x"*S[CBY 0,lӲA0`:~v!"J$%MT,K=/&~?A` _3W :ַ%_j.%GGtZ{ʻ # 1/_5A!Og < 3ˤ1aG,݃!ájZݍ瓜RiIplqڷv#$@hn[ag$rS X J#2s H;?044$Ҿi @RJzy_|eD# ܔg}61O=f_+ ff&ӹsnyc)1m$j{fsuϖ-?ڸiZ?Ĕ}dFjKsNɗMHH`^ff<ӨTq`㉭aI| %R̕,f1Ӣ 3ó?EOL?q7A;;ӹRK͗lYM'F/4h[K*.#WW+5<$]cYtzʏ|NmEZ_vk-?ϛ^җ5@7IŎ<w hY5u"6T#6Q!?oA/O?^Gw}@=%Ms[n^LYeQ}m>{s3$?'4jZn;&^^浤hVcDB?MnYGo_G=GӴ>rDp&[ 8p?Qg\ѧ;l_ `0:_:{'z/,3{zўhcT=I:-JO7жO;BsO'ZR*C-ghrYSz膕sR۸qiN?۾ONi}=|~w>/NQOҰ+oCOnc~j.:\ HN዇O/Z*K4 }R%v@ ӎ`E;&BڊHAQ0i9">!0Fyigs^nýJhc$ӦsFx3Y >,kpK-n OYu37bCt%Đ }6`6+> W /鿎]8e0b 1mDKIZ C3#\/.,qa.| Ltu4 ;ky%^nΎ!\U_DOü3't©Xg;?W@ ,>9w=% 1Q 9*Vzʧt Ś؁yKt:9Qf,LJix9 #KB)U ]ŭ_^Ҏ=`PT-E"X%5 eYV@$wL6Cc'6>Lc~%wHs9Y\iR_/?Ջ?k˽GGYё{m迂%sdv.@GGJ$ Z}ot f3_AMA*I4G?` x0>QG+apĦh 7ykT|tV?GCcccc󹼇 +?:8p.yYS^5 STٿSE;2u$;")޿oIENDB` pvanek-qlipper-d7b29d0/src/icons/text-enriched.png000066400000000000000000000034551516742713700222640ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs^tIME -0HIDATXýmTξj|TK#6%aB)DXP0!i ih~ _4E4F%j;s};3ή;B{3s_y9x2:4@qk0ɺu`pp˗"i Q@! f QRYбp!@s#xYq#$Et|h:>}t͛6LhE0H6J*Sd꣮2kA7G"Y0@ų"RT(/GtP`$TT\z CEOݬ-s(\|_D1JbQ 1?IBFR ZuvtwwӒЦ@% Wg 5$Bz>d2Ġ:^I5Ja(a/y;/aHH^u%"P0S}='V[Y5f㨥ZHk à=rFYD槁Ta> + tttE7n֭[5"aq%0˲prђϑ9><a~hG{{;-p}h<,8X'm7㌘ޜgzI=O0[H_X)֭X0d+Da(e  b)ΝKe@&}e\CC455nW|9 9fܸqT T띝ضMoo/--8K[{(˵PvI})VDGQ,8<ϣ)&"0$JQL&&&⾐Lz.?e= Ƕ}oHP(ߏ8ܼO-v}~;"lf0ȢT*qAerEFF4g!J?>gy 0'CC\C ,{fZ2|(3*;}r\a׮]{g+ƴ.u}u $}q[LӔ|~L޽+W\qLS&e8ֆӽ`COxYhς(9/AL Oڵ1"<ǶmLӴ9ŋ};'t:MOOmmd!'@hDb(>0ix˲f__߼g܆|l{l5C!"Da)61ZZ[Yh{_|?@{[[@ 꽦ֱ"DZd%;vxի'ڧ$_ZR,5kּ7%Xt6j R TCfݯHRTIENDB`pvanek-qlipper-d7b29d0/src/icons/text-plain.png000066400000000000000000000036531516742713700216060ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs^tIME  +IDATXýWMl}=3aքFDv RHP$@a 8K)H^p3q͞"Y6KǦ=oa ̮|Ҩk{^}%PիW7ugnkk (4k KFЅ4 hBT귪FB R)P$lg%~5=h$RB4i̠@FB:F % @<@<.b PRK{H~S*kZ]$R]mE3tM"ÕC2JVb7oe@(+}J=dLӨ6R LDGGV@hڢ޴e ]LիzRhko H}(е~=R,aB`k׮bY!B(qxKbFǡ ]ס:4M?~%=q섹X4b]]]z-4<,`64MC*زe h&mB@DD~ڐR A}D2x @", @H$bp#L\. p]h$:;;P:!s4Mׯ Z $=ϣ8t]m/*a;Ay,IRJRTJ>d2$ .]ץ8+XF!DL&a&lۆJ(hjjBTݘH$hnnFRA.CCC2Lu'\.Ǚ844Į.>}5ʏ?m۶˗`__ݻwsddmӲBpEZEu2Ѷmrvfb?911!ƍ?q]vvv<ϣeY,J(=$XJ)Zw .$o˗/W}d[[IT,Ӥ9?__DQ(J@P+W}7nĩSPTB<^gT($HU(H& (dyرc|sݻǖ޿}-wq]/yR瑟Ղ8H$hjj0Mc0ˢB쳓<>+ N>d3@j]Xp(.4J RJO?=599JS=-+ ͡bTlYx8~ONJrmTS! ^]R!%%{7m>Os TCCݓ<йnݟcW?k!fM|~{|c2NO K*3dnrIENDB`pvanek-qlipper-d7b29d0/src/main.cpp000077500000000000000000000077111516742713700173320ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include "qlippersystray.h" #include "qlipperpreferences.h" #include "qlipperdbusinterface.h" int main(int argc, char **argv) { QApplication a(argc, argv); a.setApplicationName("qlipper"); a.setDesktopFileName("qlipper"); // Note1: Allow only one instance of qlipper. // Note2: We can't use QSystemSemaphore as it doesn't provide // non-blocking API. // Note2: On unix the underlying memory segment can outlive the // QSharedMemory object(s) if the application crashes. // So we're refreshing the "alive" timestamp each 5 sec. QSharedMemory single(QStringLiteral("qlipper")); QTimer refresh_timer; refresh_timer.setSingleShot(false); refresh_timer.setInterval(5000); QObject::connect(&refresh_timer, &QTimer::timeout, [&single] { std::lock_guard guard(single); time(static_cast(single.data())); }); if (single.create(sizeof(time_t))) { std::lock_guard guard(single); time(static_cast(single.data())); refresh_timer.start(); } else if (single.attach()) { std::lock_guard guard(single); time_t refresh = *static_cast(single.data()); if (refresh > time(nullptr) - 10) { qWarning("An instance of qlipper is already running!"); return 0; } time(static_cast(single.data())); refresh_timer.start(); } else { qWarning().noquote() << "Unable to create/attach shared memory(" << single.errorString() << "), singleinstance behaviour will not work"; } a.setApplicationName("qlipper"); a.setApplicationVersion(QLIPPER_VERSION); a.setOrganizationDomain("qlipper.org"); a.setOrganizationName("Qlipper"); QSettings::setDefaultFormat(QSettings::IniFormat); a.setQuitOnLastWindowClosed(false); a.setWindowIcon(QIcon(QlipperPreferences::Instance()->getPathToIcon())); // potentially load translator QString fname(a.applicationName() + "_" + QLocale::system().name()); #ifdef Q_OS_WIN32 QString location = a.applicationDirPath() + "/translations"; #elif defined Q_OS_MAC QString location = a.applicationDirPath() + "../Resources/translations"; #elif defined Q_OS_UNIX QString location = TRANSLATION_DIR; #else // fallback QString location = a.applicationDirPath(); #endif QTranslator translator; if (translator.load(fname, location)) { a.installTranslator(&translator); } else { qDebug() << "Translator is not loaded" << fname << location; } // end of translators QlipperSystray s; s.show(); QlipperDbusInterface dbus_i{s}; auto conn = QDBusConnection::sessionBus(); if (!conn.registerService("org.qlipper")) qWarning() << "Can't register D-Bus service"; if (!conn.registerObject("/org/qlipper", &dbus_i, QDBusConnection::ExportAllSlots)) qWarning() << "Can't register object:" << conn.lastError().message(); return a.exec(); } pvanek-qlipper-d7b29d0/src/qlipper.qrc000066400000000000000000000010351516742713700200530ustar00rootroot00000000000000 icons/qlipper.png icons/application-exit.png icons/configure.png icons/dialog-cancel.png icons/edit-clear-history.png icons/help-about.png icons/image-x-generic.png icons/text-enriched.png icons/text-plain.png icons/quickopen-file.png icons/knotes.png pvanek-qlipper-d7b29d0/src/qlipperdbusinterface.cpp000066400000000000000000000020141516742713700226050ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2026 Palo Kisa This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "qlipperdbusinterface.h" #include "qlippersystray.h" QlipperDbusInterface::QlipperDbusInterface(QlipperSystray & tray, QObject * parent/* = nullptr*/) : QObject(parent) , m_tray{tray} { } void QlipperDbusInterface::show() { m_tray.shortcut_activated(); } pvanek-qlipper-d7b29d0/src/qlipperdbusinterface.h000066400000000000000000000021061516742713700222540ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2026 Palo Kisa This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #pragma once #include class QlipperSystray; class QlipperDbusInterface : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.qlipper") public: explicit QlipperDbusInterface(QlipperSystray & tray, QObject * parent = nullptr); public slots: void show(); private: QlipperSystray & m_tray; }; pvanek-qlipper-d7b29d0/src/qlipperitem.cpp000066400000000000000000000215511516742713700207340ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "qlipperpreferences.h" #include "qlipperitem.h" #include "clipboardwrap.h" QlipperItem::QlipperItem() : m_valid(false) { } QlipperItem::QlipperItem(QClipboard::Mode mode) : m_mode(mode), m_valid(true) { static const auto mime_helper = std::make_unique(); const QMimeData *mimeData = ClipboardWrap::Instance()->mimeData(mode); if (mimeData == nullptr) mimeData = mime_helper.get(); // qDebug() << "QlipperItem::QlipperItem(QClipboard::Mode mode)" << mode << clipboard->text(mode) << mimeData->hasImage(); // Clipboard can contain more possible values now: // - any mimetype which is not supported (qcolor, custom mime, ...). // in this case it will NOT be stored in the history but it will // be kept in the clipboard itself // - an empty clipboard. On X11 clipboard content is owned by the // application, so naturally closing the application drops // clipboard content. In this case the latest item should be set again. if (mimeData->formats().count() == 0) { m_valid = false; } //Note: reading all provided image/.*bmp data can make gimp crash // workadound until someone fixes this in gimp -> just read/store only the image/bmp // and don't care about other bmps const bool has_bmp = mimeData->hasFormat(QStringLiteral("image/bmp")); const QRegularExpression re_bmp(QStringLiteral("^image/.+-bmp$")); foreach (QString format, mimeData->formats()) { //qDebug() << format << mimeData->data(format); // For a simple text copy in Emacs, a lot of formats are stored: // "TIMESTAMP", "MULTIPLE", "text/plain", "COMPOUND_TEXT", "TARGETS", // "LENGTH", "DELETE", "FILE_NAME", "CHARACTER_POSITION", "LINE_NUMBER", // "COLUMN_NUMBER", "OWNER_OS", "HOST_NAME", "USER", "CLASS", "NAME", // "ATOM", "INTEGER", "SAVE_TARGETS". // When mimeData->data("MULTIPLE") is called, Emacs is no longer able to // copy to the clipboard and complains with // "Selection owner couldn't convert: MULTIPLE". // When mimeData->data("DELETE") is called, "Binary:" will be displayed // in the clipboard history instead of the copied text. // Since mimeData->data() seems to have such side effects and is not // cheap at all, it is better to call it just for the real MIME types, // i.e. those containing a '/'. if (format.contains(QLatin1Char('/')) && (!has_bmp || !re_bmp.match(format).hasMatch())) m_content[format] = mimeData->data(format); } m_display = mimeData->text(); if (mimeData->hasHtml()) { m_contentType = QlipperItem::RichText; } else if (mimeData->hasUrls()) { QString s; foreach (QUrl i, mimeData->urls()) s += i.toString() + '\n'; m_display = s; m_contentType = QlipperItem::Url; } else if (mimeData->hasText()) { m_contentType = QlipperItem::PlainText; } else { // any binary stuff m_contentType = QlipperItem::Binary; } } QlipperItem::QlipperItem(QClipboard::Mode mode, QlipperItem::ContentType contentType, const ClipboardContent &content) : m_mode(mode), m_contentType(contentType), m_valid(true), m_content(content) { m_display = m_content["text/plain"]; } QlipperItem::QlipperItem(const QString &sticky) : m_mode(QClipboard::Clipboard), m_valid(true) { if (sticky.isEmpty()) { m_valid = false; } else { m_display = sticky; m_content["text/plain"] = sticky.toUtf8(); m_contentType = QlipperItem::Sticky; } } QClipboard::Mode QlipperItem::clipBoardMode() const { return m_mode; } void QlipperItem::toClipboard(const Actions & actions) const { if (!(actions & (ToCurrent | ToOther))) { return; } ClipboardWrap * clipboard = ClipboardWrap::Instance(); QMimeData *mime = new QMimeData(); ClipboardContentIterator it(m_content); while (it.hasNext()) { it.next(); mime->setData(it.key(), it.value()); } if (actions.testFlag(ToCurrent)) { clipboard->setMimeData(mime, m_mode); } if (actions.testFlag(ToOther)) { auto mime_c = new QMimeData; for (const auto & format : mime->formats()) mime_c->setData(format, mime->data(format)); clipboard->setMimeData(mime_c, QClipboard::Clipboard == m_mode ? QClipboard::Selection : QClipboard::Clipboard); } } QString QlipperItem::displayRole() const { switch (m_contentType) { case QlipperItem::PlainText: case QlipperItem::RichText: case QlipperItem::Sticky: return m_display.left(QlipperPreferences::Instance()->displaySize()); case QlipperItem::Url: return QObject::tr("Url: %1").arg(m_display).left(QlipperPreferences::Instance()->displaySize()); case QlipperItem::Binary: return QObject::tr("Binary: %1").arg(m_display).left(QlipperPreferences::Instance()->displaySize()); } return ""; } QIcon QlipperItem::decorationRole() const { if (!QlipperPreferences::Instance()->platformExtensions()) { return iconForContentType(); } QPixmap pm; QString cacheKey = QString("%1_%2").arg(m_contentType).arg(m_mode); if (QPixmapCache::find(cacheKey, &pm)) return pm; pm = QPixmap(32, 32); QPainter p(&pm); QString theme; switch (m_mode) { case QClipboard::Clipboard: theme = "#004400"; break; case QClipboard::Selection: theme = "#000044"; break; case QClipboard::FindBuffer: theme = "#440000"; break; } pm.fill(QColor(theme)); QIcon icon = iconForContentType(); p.drawPixmap(0, 0, icon.pixmap(pm.size())); QPixmapCache::insert(cacheKey, pm); return pm; } QString QlipperItem::tooltipRole() const { QString m; QString t; switch (m_mode) { case QClipboard::Clipboard: m = QObject::tr("Clipboard"); break; case QClipboard::Selection: m = QObject::tr("Selection"); break; case QClipboard::FindBuffer: m = QObject::tr("Find Buffer"); break; } switch (m_contentType) { case QlipperItem::PlainText: t = QObject::tr("Plain Text"); break; case QlipperItem::RichText: t = QObject::tr("Rich Text"); break; case QlipperItem::Binary: t = QObject::tr("Binary Content"); break; case QlipperItem::Url: t = QObject::tr("URL"); break; case QlipperItem::Sticky: t = QObject::tr("Sticky Item (Plain Text)"); break; } return QString("%1: %2").arg(m).arg(t); } bool QlipperItem::operator==(const QlipperItem &other) const { // do not check contentType here as we need to compare sticky vs. rest of the world // Note2: If we're synchronizing clipboards, clipboard type/mode don't need to match return this->isValid() == other.isValid() && (this->clipBoardMode() == other.clipBoardMode() || QlipperPreferences::Instance()->shouldSynchronizeClipboards() ) && this->content() == other.content(); } QIcon QlipperItem::iconForContentType() const { QString theme; switch (m_contentType) { case QlipperItem::PlainText: theme = "text-plain"; break; case QlipperItem::RichText: theme = "text-enriched"; break; case QlipperItem::Binary: theme = "image-x-generic"; break; case QlipperItem::Url: theme = "quickopen-file"; break; case QlipperItem::Sticky: theme = "knotes"; break; } return QIcon::fromTheme(theme, QIcon(QString(":/icons/%1.png").arg(theme))); } QDebug operator<<(QDebug dbg, const QlipperItem &c) { dbg.nospace() << "QlipperItem(mode=" << c.clipBoardMode() << ", contentType=" << c.contentType() << ", text=" << c.content() << ")"; return dbg.space(); } pvanek-qlipper-d7b29d0/src/qlipperitem.h000066400000000000000000000042061516742713700203770ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef QLIPPERITEM_H #define QLIPPERITEM_H #include #include #include #include "qlippertypes.h" class QlipperItem { public: enum ContentType { PlainText, RichText, Binary, Url, Sticky }; enum Action { NoAction = 0 , ToCurrent = 1 , ToOther = 1 << 1 }; Q_DECLARE_FLAGS(Actions, Action) QlipperItem(); QlipperItem(QClipboard::Mode mode); QlipperItem(QClipboard::Mode mode, ContentType contentType, const ClipboardContent &content); QlipperItem(const QString & sticky); QClipboard::Mode clipBoardMode() const; ClipboardContent content() const { return m_content; } QString display() const { return m_display; } QlipperItem::ContentType contentType() const { return m_contentType; } bool isValid() const { return m_valid; } void toClipboard(const Actions & actions) const; QString displayRole() const; QIcon decorationRole() const; QString tooltipRole() const; bool operator==(const QlipperItem &other) const; private: QClipboard::Mode m_mode; ContentType m_contentType; bool m_valid; ClipboardContent m_content; QString m_display; QIcon iconForContentType() const; }; Q_DECLARE_METATYPE(QlipperItem::ContentType) QDebug operator<<(QDebug dbg, const QlipperItem &c); #endif // QLIPPERITEM_H pvanek-qlipper-d7b29d0/src/qlippermodel.cpp000066400000000000000000000156021516742713700210760ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "qlippermodel.h" #include "qlipperpreferences.h" #include "qlippernetwork.h" #include "clipboardwrap.h" QlipperModel::QlipperModel(QObject *parent) : QAbstractListModel(parent) { m_network = new QlipperNetwork(this); m_boldFont.setBold(true); m_sticky = QlipperPreferences::Instance()->getStickyItems(); m_dynamic = QlipperPreferences::Instance()->getDynamicItems(); // a little hack-a-magic to have almost if (m_sticky.count() + m_dynamic.count() == 0) { clipboard_changed(QClipboard::Clipboard); if (m_dynamic.count() == 0) { clearHistory(); } } #ifdef Q_WS_MAC m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(timer_timeout())); m_timer->start(1000); #endif connect(ClipboardWrap::Instance(), &ClipboardWrap::changed, this, &QlipperModel::clipboard_changed); } QlipperModel::~QlipperModel() { QlipperPreferences::Instance()->saveDynamicItems(m_dynamic); QlipperPreferences::Instance()->saveStickyItems(m_sticky); m_dynamic.clear(); m_sticky.clear(); } void QlipperModel::resetPreferences() { beginRemoveRows(QModelIndex(), 0, m_sticky.count() - 1); m_sticky.clear(); endRemoveRows(); QList sticky = QlipperPreferences::Instance()->getStickyItems(); beginInsertRows(QModelIndex(), 0, sticky.count() - 1); m_sticky = sticky; endInsertRows(); } int QlipperModel::rowCount(const QModelIndex&) const { return m_sticky.count() + m_dynamic.count(); } // TODO/FIXME: BETTER API! This is very confusing and potentially dangerous... QList QlipperModel::getList(int & row) const { if (m_sticky.count() > row) { return m_sticky; } else { row = row - m_sticky.count(); return m_dynamic; } } QVariant QlipperModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) return ""; int row = index.row(); QList list = getList(row); switch (role) { case Qt::DisplayRole: return list.at(row).displayRole(); case Qt::DecorationRole: return list.at(row).decorationRole(); case Qt::ToolTipRole: return list.at(row).tooltipRole(); case Qt::FontRole: return m_currentIndex == index ? m_boldFont : m_normalFont; } return ""; } Qt::ItemFlags QlipperModel::flags(const QModelIndex & index) const { Q_UNUSED(index); return Qt::ItemIsEditable | Qt::ItemIsEnabled; } void QlipperModel::clipboard_changed(QClipboard::Mode mode) { if ((mode == QClipboard::Selection || mode == QClipboard::FindBuffer) && !QlipperPreferences::Instance()->platformExtensions()) { return; } QlipperItem item(mode); if (!item.isValid()) { // See QlipperItem constructor: On X11 clipboard content is owned by the // application, so naturally closing the application drops // clipboard content. In this case the latest item should be set again. for (QList::const_iterator i = m_dynamic.begin(), i_e = m_dynamic.end(); i_e != i; ++i) { if (i->clipBoardMode() == item.clipBoardMode()) { i->toClipboard(QlipperItem::ToCurrent); m_currentIndex = index(m_sticky.count() + (i - m_dynamic.begin())); break; } } return; } if (QlipperPreferences::Instance()->shouldSynchronizeClipboardsInstantly()) { item.toClipboard(QlipperItem::ToOther); } // evaluate sticky items... int i = m_sticky.indexOf(item); if (i != -1) { m_currentIndex = index(i); return; } int ix = m_dynamic.indexOf(item); if (ix == -1) { const int sticky_count = m_sticky.count(); beginInsertRows(QModelIndex(), sticky_count, sticky_count); m_dynamic.prepend(item); endInsertRows(); const int max_history = QlipperPreferences::Instance()->historyCount(); if (m_dynamic.count() > max_history) { beginRemoveRows(QModelIndex(), sticky_count + max_history - 1, sticky_count + m_dynamic.count() - 1); m_dynamic.erase(m_dynamic.begin() + (max_history - 1), m_dynamic.end()); endRemoveRows(); } ix = 0; } setCurrentDynamic(ix); } void QlipperModel::setCurrentDynamic(int ix) { // move if not already on top if (ix != 0) { const int sticky_count = m_sticky.count(); beginMoveRows(QModelIndex(), sticky_count + ix, sticky_count + ix, QModelIndex(), sticky_count); m_dynamic.move(ix, 0); endMoveRows(); } m_currentIndex = index(m_sticky.count()); m_network->sendData(m_dynamic.at(0).content()); if (QlipperPreferences::Instance()->synchronizeHistory()) { QlipperPreferences::Instance()->saveDynamicItems(m_dynamic); } } void QlipperModel::clearHistory() { const int sticky_count = m_sticky.count(); beginRemoveRows(QModelIndex(), sticky_count, sticky_count + m_dynamic.count() - 1); m_dynamic.clear(); endRemoveRows(); ClipboardContent tmp; tmp["text/plain"] = tr("Welcome to the Qlipper clipboard history applet").toUtf8(); QlipperItem item(QClipboard::Clipboard, QlipperItem::PlainText, tmp); beginInsertRows(QModelIndex(), sticky_count, sticky_count); m_dynamic.append(item); endInsertRows(); m_currentIndex = index(sticky_count); } void QlipperModel::indexTriggered(const QModelIndex & index) { if (!index.isValid()) return; int row = index.row(); QList list = getList(row); QlipperItem::Actions actions(QlipperItem::ToCurrent); actions |= QlipperPreferences::Instance()->shouldSynchronizeClipboards() ? QlipperItem::ToOther : QlipperItem::NoAction; list.at(row).toClipboard(actions); m_currentIndex = index; if (m_sticky.size() <= index.row()) { setCurrentDynamic(row); } } void QlipperModel::timer_timeout() { #ifdef Q_WS_MAC m_timer->stop(); clipboard_changed(QClipboard::Clipboard); m_timer->start(); #endif } pvanek-qlipper-d7b29d0/src/qlippermodel.h000066400000000000000000000043461516742713700205460ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef QLIPPERMODEL_H #define QLIPPERMODEL_H #include #include #include #include "qlipperitem.h" class QTimer; class QlipperNetwork; class QlipperModel : public QAbstractListModel { Q_OBJECT public: explicit QlipperModel(QObject *parent = 0); ~QlipperModel(); void resetPreferences(); public slots: void clearHistory(); void indexTriggered(const QModelIndex &); protected: int rowCount(const QModelIndex&) const; QVariant data(const QModelIndex&, int) const; Qt::ItemFlags flags(const QModelIndex & index) const; private: QList m_sticky; QList m_dynamic; QPersistentModelIndex m_currentIndex; QlipperNetwork *m_network; QFont m_normalFont; QFont m_boldFont; #ifdef Q_WS_MAC QTimer *m_timer; QVariant m_previousContent; #endif QList getList(int &row) const; void setCurrentDynamic(int ix); private slots: void clipboard_changed(QClipboard::Mode); /*! Mac OS X from Qt 4.3.x does not handle signals sent from QClipboard until the app window is activated (eg. by the global shortcuts. It leads into possible lost items. This timer-slot-update_if_required mechanism workarounds it. Until I'll find better solution. Now the timeout is a compromise between system load and history recording usability. See m_timer, m_previousContent */ void timer_timeout(); }; #endif // QLIPPERMODEL_H pvanek-qlipper-d7b29d0/src/qlippernetwork.cpp000066400000000000000000000064241516742713700214710ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "qlippernetwork.h" #include "qlipperitem.h" #include "qlipperpreferences.h" #include #ifdef ENABLE_NETWORK_CLIPBOARD_SHARING #include #endif QlipperNetwork::QlipperNetwork(QObject *parent) : QObject(parent) { setObjectName("qlipperNetwork"); #ifdef ENABLE_NETWORK_CLIPBOARD_SHARING QString hostname(QHostInfo::localHostName()); if (hostname.isEmpty()) hostname = "unknown"; QString uname; #ifdef Q_OS_UNIX // Mac, linux, and the other unices. uname = qgetenv("USER"); #endif #ifdef Q_WS_WIN // Windows. uname = qgetenv("USERNAME"); #endif if (uname.isEmpty()) uname = "unknown"; m_id = uname + "@" + hostname; m_socket = new QUdpSocket(this); bool r = m_socket->bind(QlipperPreferences::Instance()->networkPort(), QUdpSocket::ShareAddress); connect(m_socket, SIGNAL(readyRead()), this, SLOT(readData())); if (!r) qDebug() << "socket bound:" << r << m_socket->error() << m_socket->errorString(); #endif } void QlipperNetwork::sendData(const ClipboardContent &value) { #ifdef ENABLE_NETWORK_CLIPBOARD_SHARING if (!QlipperPreferences::Instance()->networkSend()) return; QByteArray serialized; QDataStream ds(&serialized, QIODevice::WriteOnly); ds << m_id << value; qDebug() << "SENDING:" << serialized; QByteArray data = qCompress(serialized); int r = m_socket->writeDatagram(data.data(), data.size(), QHostAddress::Broadcast, QlipperPreferences::Instance()->networkPort()); if (r == -1) qDebug() << "error to send" << m_socket->error() << m_socket->errorString(); #endif } void QlipperNetwork::readData() { #ifdef ENABLE_NETWORK_CLIPBOARD_SHARING if (!QlipperPreferences::Instance()->networkReceive()) return; QString remoteId; while (m_socket->hasPendingDatagrams()) { QByteArray data; data.resize(m_socket->pendingDatagramSize()); m_socket->readDatagram(data.data(), data.size()); QByteArray value = qUncompress(data); QDataStream ds(value); ds >> remoteId; // ignore own data if (m_id == remoteId) continue; ClipboardContent c; ds >> c; qDebug() << "RECEIVED:" << c; QlipperItem item(QClipboard::Clipboard, QlipperItem::PlainText, c); // Manually create an action, and then pass it through. QlipperItem::Actions action; action |= QlipperItem::ToCurrent; action |= QlipperItem::ToOther; item.toClipboard(action); } #endif } pvanek-qlipper-d7b29d0/src/qlippernetwork.h000066400000000000000000000023461516742713700211350ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef QLIPPERNETWORK_H #define QLIPPERNETWORK_H #include #ifdef ENABLE_NETWORK_CLIPBOARD_SHARING #include #endif #include "qlippertypes.h" class QlipperNetwork : public QObject { Q_OBJECT public: QlipperNetwork(QObject *parent=0); public slots: void sendData(const ClipboardContent &value); private: #ifdef ENABLE_NETWORK_CLIPBOARD_SHARING QUdpSocket *m_socket; QString m_id; #endif private slots: void readData(); }; #endif pvanek-qlipper-d7b29d0/src/qlipperpreferences.cpp000077500000000000000000000135731516742713700223070ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "qlipperpreferences.h" const QString QlipperPreferences::DEFAULT_ICON_PATH = QStringLiteral(":/icons/qlipper.png"); // allow to store ClipboardContent in the QSettings variant QDataStream &operator<<(QDataStream &out, const ClipboardContent &obj) { int size = obj.size(); out << size; ClipboardContentIterator it(obj); while (it.hasNext()) { it.next(); out << it.key() << it.value(); } return out; } // allow to read ClipboardContent from QSettings QDataStream &operator>>(QDataStream &in, ClipboardContent &obj) { int size; QString key; QByteArray value; in >> size; for (int i = 0; i < size; ++i) { in >> key >> value; obj[key] = value; } return in; } QlipperPreferences* QlipperPreferences::m_instance = nullptr; QlipperPreferences::QlipperPreferences() : QSettings() { qRegisterMetaType("ClipboardContent"); } QlipperPreferences::~QlipperPreferences() { sync(); } QlipperPreferences *QlipperPreferences::Instance() { if (!m_instance) m_instance = new QlipperPreferences(); return m_instance; } QList QlipperPreferences::getStickyItems() { QList l; // // keys: // - value, QString // beginGroup("sticky"); int count = beginReadArray("items"); for (int i = 0; i < count; ++i) { setArrayIndex(i); QlipperItem item(value("text").toString()); if (item.isValid()) l.append(item); } endArray(); endGroup(); return l; } void QlipperPreferences::saveStickyItems(QList list) { beginGroup("sticky"); int i = 0; remove("items"); beginWriteArray("items"); foreach (QlipperItem item, list) { setArrayIndex(i); i++; setValue("text", item.display()); } endArray(); endGroup(); } QList QlipperPreferences::getDynamicItems() { QList l; // // keys: // - mode, QClipboard::Mode // - contentType, QlipperItem::ContentType // - content, QVariant // beginGroup("dynamic"); int count = beginReadArray("items"); for (int i = 0; i < count; ++i) { setArrayIndex(i); // qDebug() << "R" << qVariantValue(value("content")); QlipperItem item(static_cast(value("mode").toUInt()),//value("mode").value(), static_cast(value("contentType").toUInt()), // value("contentType").value(), value("content").value() ); if (item.isValid()) l.append(item); } endArray(); endGroup(); return l; } void QlipperPreferences::saveDynamicItems(QList list) { bool clearOnExit = clearItemsOnExit(); beginGroup("dynamic"); int i = 0; remove("items"); if (!clearOnExit) { beginWriteArray("items"); foreach (QlipperItem item, list) { setArrayIndex(i); i++; setValue("mode", item.clipBoardMode()); setValue("contentType", item.contentType()); setValue("content", QVariant::fromValue(item.content())); } endArray(); } endGroup(); sync(); } QString QlipperPreferences::getPathToIcon() const { return value(QLatin1String("tray_icon_file"), DEFAULT_ICON_PATH).toString(); } void QlipperPreferences::savePathToIcon(const QString &path) { setValue(QLatin1String("tray_icon_file"), path); sync(); } bool QlipperPreferences::trim() { return value("trim", true).toBool(); } int QlipperPreferences::displaySize() const { return value("displaySize", 30).toInt(); } QString QlipperPreferences::shortcut() const { return value("shortcut", "CTRL+ALT+V").toString(); } int QlipperPreferences::historyCount() const { return value("historyCount", 10).toInt(); } bool QlipperPreferences::platformExtensions() const { return value("platformExtensions", false).toBool(); } QlipperPreferences::PSESynchronization QlipperPreferences::synchronizePSE() const { return static_cast(value("synchronizePSE", PSE_NO_SYNC).toInt()); } bool QlipperPreferences::clearItemsOnExit() const { return value("clearItemsOnExit", false).toBool(); } bool QlipperPreferences::synchronizeHistory() const { return value("synchronizeHistory", true).toBool(); } bool QlipperPreferences::confirmOnClear() const { return value("confirmClear", true).toBool(); } bool QlipperPreferences::networkSend() const { return value("networkSend", false).toBool(); } bool QlipperPreferences::networkReceive() const { return value("networkReceive", false).toBool(); } int QlipperPreferences::networkPort() const { return value("networkPort", 6666).toInt(); } bool QlipperPreferences::shouldSynchronizeClipboards() const { return platformExtensions() && PSE_NO_SYNC != synchronizePSE(); } bool QlipperPreferences::shouldSynchronizeClipboardsInstantly() const { return platformExtensions() && PSE_SYNC_INSTANTLY == synchronizePSE(); } pvanek-qlipper-d7b29d0/src/qlipperpreferences.h000077500000000000000000000040451516742713700217460ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef QLIPPERPREFERENCES_H #define QLIPPERPREFERENCES_H #include #include #include "qlipperitem.h" class QlipperPreferences : public QSettings { public: enum PSESynchronization { PSE_NO_SYNC = 0 , PSE_SYNC_ON_SELECTION = 1 , PSE_SYNC_INSTANTLY = 2 }; public: static const QString DEFAULT_ICON_PATH; static QlipperPreferences *Instance(); ~QlipperPreferences(); QList getStickyItems(); void saveStickyItems(QList list); QList getDynamicItems(); void saveDynamicItems(QList list); QString getPathToIcon() const; void savePathToIcon(const QString &path); bool trim(); int displaySize() const; QString shortcut() const; int historyCount() const; bool platformExtensions() const; PSESynchronization synchronizePSE() const; bool clearItemsOnExit() const; bool synchronizeHistory() const; bool confirmOnClear() const; bool networkSend() const; bool networkReceive() const; int networkPort() const; bool shouldSynchronizeClipboards() const; bool shouldSynchronizeClipboardsInstantly() const; private: QlipperPreferences(); static QlipperPreferences* m_instance; }; #endif // QLIPPERPREFERENCES_H pvanek-qlipper-d7b29d0/src/qlipperpreferencesdialog.cpp000077500000000000000000000175541516742713700234720ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "qlipperitem.h" #include "qlipperpreferences.h" #include "qlipperpreferencesdialog.h" QlipperPreferencesDialog::QlipperPreferencesDialog(QWidget *parent) : QDialog(parent) { setupUi(this); QlipperPreferences *s = QlipperPreferences::Instance(); historyComboBox->setValue(s->historyCount()); displaySizeComboBox->setValue(s->displaySize()); trimCheckBox->setChecked(s->trim()); shortcutWidget->setKeySequence(QKeySequence(s->shortcut())); if (QGuiApplication::platformName() == "wayland") { keyboardShortcutLabel->setToolTip(tr("Global shortcuts can't be handled by app on wayland.\nYou can configure shortcut in compositor and use D-Bus invocation, e.g.:\nqdbus6 org.qlipper /org/qlipper show")); keyboardShortcutLabel->setEnabled(false); shortcutWidget->setEnabled(false); } const bool pse = s->platformExtensions(); platformExtensionsCheckBox->setChecked(pse); synchronizePSE->setEnabled(pse); synchronizePSE->setCurrentIndex(s->synchronizePSE()); clearItemsOnExit->setChecked(s->clearItemsOnExit()); synchronizeHistory->setChecked(s->synchronizeHistory()); confirmOnClear->setChecked(s->confirmOnClear()); networkSendCheckBox->setChecked(s->networkSend()); networkReceiveCheckBox->setChecked(s->networkReceive()); portSpinBox->setValue(s->networkPort()); #ifndef ENABLE_NETWORK_CLIPBOARD_SHARING toolBox->setItemEnabled(2, false); #endif foreach(QlipperItem item, QlipperPreferences::Instance()->getStickyItems()) { listWidget->addItem(item.display()); } connect(stickyAddButton, SIGNAL(clicked()), this, SLOT(stickyAddButton_clicked())); connect(stickyRemoveButton, SIGNAL(clicked()), this, SLOT(stickyRemoveButton_clicked())); connect(stickyUpButton, SIGNAL(clicked()), this, SLOT(stickyUpButton_clicked())); connect(stickyDownButton, SIGNAL(clicked()), this, SLOT(stickyDownButton_clicked())); connect(listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(listWidget_currentRowChanged(int))); if (listWidget->count()) listWidget->setCurrentRow(0); else { stickyUpButton->setEnabled(false); stickyDownButton->setEnabled(false); stickyRemoveButton->setEnabled(false); } // Setup icon image machinery. // Setup menu & actions for icon selection. QMenu *iconMenu = new QMenu(tr("Icon selection"), this); QAction *actLoadFromFile = new QAction(tr("Load icon from file..."), this); QAction *actUseDefault = new QAction(QIcon(QlipperPreferences::DEFAULT_ICON_PATH), tr("Use default icon"), this); iconMenu->addAction(actLoadFromFile); iconMenu->addAction(actUseDefault); temporarilyRembemberNewTrayIcon(s->getPathToIcon()); buttonIconImage->setMenu(iconMenu); connect(actLoadFromFile, &QAction::triggered, this, &QlipperPreferencesDialog::selectIconFromFile); connect(actUseDefault, &QAction::triggered, this, &QlipperPreferencesDialog::useDefaultIcon); resize(sizeHint()); } void QlipperPreferencesDialog::accept() { QlipperPreferences *s = QlipperPreferences::Instance(); s->setValue("historyCount", historyComboBox->value()); s->setValue("displaySize", displaySizeComboBox->value()); s->setValue("trim", trimCheckBox->isChecked()); s->setValue("platformExtensions", platformExtensionsCheckBox->isChecked()); s->setValue("synchronizePSE", synchronizePSE->currentIndex()); s->setValue("shortcut", shortcutWidget->keySequence().toString()); s->setValue("clearItemsOnExit", clearItemsOnExit->isChecked()); s->setValue("synchronizeHistory", synchronizeHistory->isChecked()); s->setValue("confirmClear", confirmOnClear->isChecked()); s->setValue("networkReceive", networkReceiveCheckBox->isChecked()); s->setValue("networkSend", networkSendCheckBox->isChecked()); s->setValue("networkPort", portSpinBox->value()); QList list; for (int i = 0; i < listWidget->count(); ++i) { QlipperItem item(listWidget->item(i)->text()); list.append(item); } QlipperPreferences::Instance()->saveStickyItems(list); QlipperPreferences::Instance()->savePathToIcon(getNewTrayIcon()); QDialog::accept(); } void QlipperPreferencesDialog::selectIconFromFile() { QScopedPointer dialog(new QFileDialog(this, tr("Select icon file"), QString(), tr("Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga)"))); dialog->setFileMode(QFileDialog::ExistingFile); dialog->setOptions(QFileDialog::ReadOnly); dialog->setViewMode(QFileDialog::Detail); dialog->setLabelText(QFileDialog::Accept, tr("Select icon")); dialog->setLabelText(QFileDialog::Reject, tr("Cancel")); //: Label to describe the folder for icon file selection dialog. dialog->setLabelText(QFileDialog::LookIn, tr("Look in:")); dialog->setLabelText(QFileDialog::FileName, tr("Icon name:")); dialog->setLabelText(QFileDialog::FileType, tr("Icon type:")); if (dialog->exec() == QDialog::Accepted && !dialog->selectedFiles().isEmpty()) { temporarilyRembemberNewTrayIcon(dialog->selectedFiles().value(0)); } } void QlipperPreferencesDialog::useDefaultIcon() { temporarilyRembemberNewTrayIcon(QlipperPreferences::DEFAULT_ICON_PATH); } void QlipperPreferencesDialog::stickyAddButton_clicked() { bool ok; QString s = QInputDialog::getText(this, tr("Add New Sticky Item"), tr("Add New Sticky Item"), QLineEdit::Normal, "", &ok); if (ok && !s.isEmpty()) { listWidget->addItem(s); listWidget->setCurrentRow(listWidget->count()-1); } } void QlipperPreferencesDialog::stickyRemoveButton_clicked() { QListWidgetItem * item = listWidget->takeItem(listWidget->currentRow()); if (item) delete item; } void QlipperPreferencesDialog::stickyUpButton_clicked() { int row = listWidget->currentRow(); if (row == 0) return; QListWidgetItem * item = listWidget->takeItem(row); if (!item) return; listWidget->insertItem(row-1, item); listWidget->setCurrentRow(row-1); } void QlipperPreferencesDialog::stickyDownButton_clicked() { int row = listWidget->currentRow(); if (row == listWidget->count()-1) return; QListWidgetItem * item = listWidget->takeItem(row); if (!item) return; listWidget->insertItem(row+1, item); listWidget->setCurrentRow(row+1); } void QlipperPreferencesDialog::listWidget_currentRowChanged(int row) { int count = listWidget->count(); stickyUpButton->setEnabled(count && row != 0); stickyDownButton->setEnabled(count && row != count-1); stickyRemoveButton->setEnabled(count); } void QlipperPreferencesDialog::temporarilyRembemberNewTrayIcon(const QString &path) { buttonIconImage->setIcon(QIcon(path)); buttonIconImage->setProperty("tray_icon", path); } QString QlipperPreferencesDialog::getNewTrayIcon() const { return buttonIconImage->property("tray_icon").toString(); } pvanek-qlipper-d7b29d0/src/qlipperpreferencesdialog.h000077500000000000000000000027031516742713700231250ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef QLIPPERPREFERENCESDIALOG_H #define QLIPPERPREFERENCESDIALOG_H #include "ui_qlipperpreferencesdialog.h" class QlipperPreferencesDialog : public QDialog, private Ui::QlipperPreferencesDialog { Q_OBJECT public: explicit QlipperPreferencesDialog(QWidget *parent = 0); private slots: void accept(); void selectIconFromFile(); void useDefaultIcon(); void stickyAddButton_clicked(); void stickyRemoveButton_clicked(); void stickyUpButton_clicked(); void stickyDownButton_clicked(); void listWidget_currentRowChanged(int); private: void temporarilyRembemberNewTrayIcon(const QString &path); QString getNewTrayIcon() const; }; #endif // QLIPPERPREFERENCESDIALOG_H pvanek-qlipper-d7b29d0/src/qlipperpreferencesdialog.ui000077500000000000000000000314011516742713700233100ustar00rootroot00000000000000 QlipperPreferencesDialog 0 0 358 430 Qlipper Preferences Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok 0 0 0 371 305 Preferences Clipboard Entries Count: The maximum count of dynamic items in the menu Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter entries 1 99 5 Maximum Display Size: How long is the preview text in the menu Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter characters 10 200 Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Trim Whitespaces for Every Line Keyboard Shortcut: Change global keyboard shortcut to invoke the menu on screen Tray icon image: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 20 20 QToolButton::InstantPopup Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Use Platform Specific Extensions (Advanced) No synchronization of clipboard & PSE Synchronize clipboard & PSE when item selected Synchronize clipboard & PSE instantly Clear Items on Exit Synchronize history to storage instantly Qt::Vertical 20 96 Confirm Clear History 0 0 340 292 Sticky Items Sticky items are unchanged, always on top snippets in the menu true Qt::Vertical 20 32 Add new item to the end of the list &Add Remove current item &Remove Move item up &Up Move item down &Down Qt::Vertical 20 32 0 0 340 292 Network (Experimental) Send Content to Network Receive Content from Network Port: 0 0 1 9999 Qt::Vertical 20 68 QKeySequenceWidget QWidget
qkeysequencewidget.h
1
buttonBox accepted() QlipperPreferencesDialog accept() 271 291 157 274 buttonBox rejected() QlipperPreferencesDialog reject() 303 291 286 274 platformExtensionsCheckBox clicked(bool) synchronizePSE setEnabled(bool) 20 20 20 20
pvanek-qlipper-d7b29d0/src/qlippersystray.cpp000077500000000000000000000136751516742713700215270ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "qmenuview.h" #include "qlippermodel.h" #include "qxtglobalshortcut.h" #include "qlipperpreferences.h" #include "qlipperpreferencesdialog.h" #include "qlippersystray.h" QlipperSystray::QlipperSystray(QObject *parent) : QSystemTrayIcon(parent) #ifndef NO_QXT , m_shortcutMenu(0) #endif { setIcon(QIcon(QlipperPreferences::Instance()->getPathToIcon())); m_model = new QlipperModel(this); m_contextMenu = new QMenu(); m_contextMenu->addAction(QIcon::fromTheme("edit-clear-hstory", QIcon(":/icons/edit-clear-history.png")), tr("C&lear clipboard history") , this, &QlipperSystray::clear_history); m_contextMenu->addAction(QIcon::fromTheme("configure", QIcon(":/icons/configure.png")), tr("&Configure...") , this, &QlipperSystray::editPreferences); m_contextMenu->addSeparator(); m_contextMenu->addAction(QIcon::fromTheme("help-about", QIcon(":/icons/help-about.png")), tr("&About Qlipper...") , this, &QlipperSystray::showAbout); m_contextMenu->addAction(QIcon::fromTheme("application-exit", QIcon(":/icons/application-exit.png")), tr("&Quit") , qApp, &QCoreApplication::quit); setContextMenu(m_contextMenu); #ifndef NO_QXT m_shortcutMenu = new QMenuView(); m_shortcutMenu->setModel(m_model); m_shortcutMenu->setWindowTitle(tr("Qlipper - a clipboard history applet")); // Windows API does not handle well some combinations of flags in custom widgets. #ifndef Q_OS_WIN32 // This flag is mandatory to get focus when user activates global_key. // OK, window gets a decoration but it works. Menu is displayed without the // the decoration if is the systray icon clicked. m_shortcutMenu->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint); #endif connect(m_shortcutMenu, SIGNAL(triggered(QModelIndex)), m_model, SLOT(indexTriggered(QModelIndex))); connect(m_shortcutMenu, SIGNAL(triggered(QModelIndex)), m_shortcutMenu, SLOT(close())); m_shortcut = new QxtGlobalShortcut(this); connect(m_shortcut, SIGNAL(activated()), this, SLOT(shortcut_activated())); m_shortcut->setShortcut(QlipperPreferences::Instance()->shortcut()); #else qWarning() << "Global keyboard shortcut is not compiled in."; #endif connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systray_activated(QSystemTrayIcon::ActivationReason))); } QlipperSystray::~QlipperSystray() { #ifndef NO_QXT m_contextMenu->deleteLater(); if (m_shortcutMenu) m_shortcutMenu->deleteLater(); #endif m_model->deleteLater(); } void QlipperSystray::shortcut_activated() { #ifndef NO_QXT if (m_shortcutMenu->isVisible()) m_shortcutMenu->hide(); else { m_shortcutMenu->popup(QCursor::pos()); // activateWindow and raise are mandatory to get proper focus for keyboard after global_key. m_shortcutMenu->activateWindow(); m_shortcutMenu->raise(); } #endif } void QlipperSystray::editPreferences() { QlipperPreferencesDialog d; if (!d.exec()) return; #ifndef NO_QXT m_shortcut->setShortcut(QlipperPreferences::Instance()->shortcut()); #endif m_model->resetPreferences(); // Set new icon. const QString icon_path = QlipperPreferences::Instance()->getPathToIcon(); setIcon(QIcon(icon_path)); } void QlipperSystray::showAbout() { #ifndef NO_QXT QString globalKeySupport = tr("Yes"); #else QString globalKeySupport = tr("No"); #endif #ifdef ENABLE_NETWORK_CLIPBOARD_SHARING QString enableNetwork = tr("Yes (experimental)"); #else QString enableNetwork = tr("No"); #endif QMessageBox msgBox; //msgBox.setMinimumWidth(600); msgBox.setWindowIcon(QIcon(":/icons/qlipper.png")); msgBox.setIconPixmap (QPixmap(":/icons/qlipper.png")); msgBox.setWindowTitle(tr("About Qlipper")); msgBox.setText(QString("

Qlipper %1

").arg(qApp->applicationVersion())); msgBox.setInformativeText(tr("Lightweight, cross-platform clipboard history applet.

" "(c) 2010-2016 Petr Vanek <petr@yarpen.cz>

" "https://github.com/pvanek/qlipper/" "

" "Support for global keyboard shortcut: %1
" "Support for network clipboard sharing: %2").arg(globalKeySupport).arg(enableNetwork)); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.exec(); } void QlipperSystray::systray_activated(QSystemTrayIcon::ActivationReason reason) { #ifndef Q_WS_MAC if (reason == QSystemTrayIcon::Trigger) shortcut_activated(); #else Q_UNUSED(reason); #endif } void QlipperSystray::clear_history() { if (!QlipperPreferences::Instance()->confirmOnClear()) { m_model->clearHistory(); return; } int ret = QMessageBox::question(nullptr, tr("Confirm"), tr("Are you sure that you want to clear your clipboard history?"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel); if (ret == QMessageBox::Ok) m_model->clearHistory(); } pvanek-qlipper-d7b29d0/src/qlippersystray.h000066400000000000000000000026511516742713700211610ustar00rootroot00000000000000/* Qlipper - clipboard history manager Copyright (C) 2012 Petr Vanek This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef QLIPPERSYSTRAY_H #define QLIPPERSYSTRAY_H #include class QlipperModel; class QMenuView; #ifndef NO_QXT class QxtGlobalShortcut; #endif class QlipperSystray : public QSystemTrayIcon { Q_OBJECT public: explicit QlipperSystray(QObject *parent = 0); ~QlipperSystray(); private: QlipperModel *m_model; QMenu *m_contextMenu; #ifndef NO_QXT QMenuView *m_shortcutMenu; QxtGlobalShortcut *m_shortcut; #endif public slots: void shortcut_activated(); private slots: void editPreferences(); void showAbout(); void systray_activated(QSystemTrayIcon::ActivationReason reason); void clear_history(); }; #endif // QLIPPERSYSTRAY_H pvanek-qlipper-d7b29d0/src/qlippertypes.h000066400000000000000000000004301516742713700206000ustar00rootroot00000000000000#ifndef QLIPPERTYPES_H #define QLIPPERTYPES_H #include #include typedef QHash ClipboardContent; typedef QHashIterator ClipboardContentIterator; Q_DECLARE_METATYPE(ClipboardContent); #endif // QLIPPERTYPES_H pvanek-qlipper-d7b29d0/src/signalhandler.cpp000066400000000000000000000035041516742713700212120ustar00rootroot00000000000000#include "signalhandler.h" #include #include #include #include #include #include #include #include #include Q_GLOBAL_STATIC(SignalHandler, signalHandlerFunc) void SignalHandler::signalHandler(int signo) { int ret = write(signalHandlerFunc()->mSignalSock[0], &signo, sizeof (int)); if (sizeof (int) != ret) qCritical() << QStringLiteral("unable to write into socketpair, %1").arg(strerror(errno)); } SignalHandler::SignalHandler() { if (0 != socketpair(AF_UNIX, SOCK_STREAM, 0, mSignalSock)) { qCritical() << QStringLiteral("unable to create socketpair for correct signal handling: %1)").arg(strerror(errno)); return; } mNotifier.reset(new QSocketNotifier(mSignalSock[1], QSocketNotifier::Read)); QObject::connect(mNotifier.data(), &QSocketNotifier::activated, this, &SignalHandler::socketActivated); listenToSignals(QList() << SIGINT << SIGTERM << SIGHUP); } SignalHandler::~SignalHandler() { close(mSignalSock[0]); close(mSignalSock[1]); } void SignalHandler::listenToSignals(QList const & signoList) { struct sigaction sa; sa.sa_handler = signalHandler; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; for (QList::const_iterator i = signoList.begin(), i_e = signoList.end(); i != i_e; ++i) sigaction(*i, &sa, 0); } void SignalHandler::socketActivated() { int signo = 0; int ret = read(mSignalSock[1], &signo, sizeof (int)); if (sizeof (int) != ret) qCritical() << QStringLiteral("unable to read signal from socketpair, %1").arg(strerror(errno)); QApplication::quit(); } static void startup() { // just make the instantiation/creation happen signalHandlerFunc(); } Q_COREAPP_STARTUP_FUNCTION(startup) pvanek-qlipper-d7b29d0/src/signalhandler.h000066400000000000000000000007211516742713700206550ustar00rootroot00000000000000#if !defined(signalhandler_h) #define signalhandler_h #include class QSocketNotifier; class SignalHandler : public QObject { Q_OBJECT public: static void signalHandler(int signo); public: SignalHandler(); ~SignalHandler(); void listenToSignals(QList const & signoList); private slots: void socketActivated(); private: int mSignalSock[2]; QScopedPointer mNotifier; }; #endif // signalhandler_h pvanek-qlipper-d7b29d0/ts/000077500000000000000000000000001516742713700155305ustar00rootroot00000000000000pvanek-qlipper-d7b29d0/ts/qlipper_ar.ts000066400000000000000000000410771516742713700202470ustar00rootroot00000000000000 QObject Url: %1 رابط:%1 Binary: %1 ثنائي: %1 Clipboard الحافظة Selection الاختيار Find Bufer Memòria intermèdia de Find Find Buffer مخزن البحث Plain Text نص عادي Rich Text النص المتناسق Binary Content محتوى ثنائي URL الرابط Sticky Item (Plain Text) عنصر اللاصق (نص عادي) QlipperModel Welcome to the Qlipper clipboard history applet مرحبًا بك في التطبيق الصغير لسجل حافظة كليبر QlipperPreferencesDialog Qlipper Preferences تفضيلات كليبر Preferences التفضيلات Keyboard Shortcut: اختصار لوحة المفاتيح: Change global keyboard shortcut to invoke the menu on screen قم بتغيير اختصار لوحة المفاتيح العامة لاستدعاء القائمة على الشاشة Clipboard Entries Count: عدد إدخالات الحافظة: The maximum count of dynamic items in the menu الحد الأقصى لعدد العناصر الديناميكية في القائمة entries إدخالات Maximum Display Size: حجم العرض الأقصى: How long is the preview text in the menu ما هي مدة نص المعاينة في القائمة characters حرفا Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported استخدم ملحقات الحافظة (X11 Selections ، OS X Find Buffer) عندما تكون مدعومة Use Platform Specific Extensions (Advanced) استخدام الإضافات الخاصة بالمنصة (متقدم) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) مفيد لكتل النص الأكبر المنسوخة على سبيل المثال من المحطات الوهمية (minicom ، إلخ) Trim Whitespaces for Every Line تقليم المسافات البيضاء لكل سطر Tray icon image: صورة ايقونة الدرج: No synchronization of clipboard & PSE لا يوجد مزامنة للحافظة و PSE Synchronize clipboard & PSE when item selected مزامنة الحافظة و PSE عند تحديد العنصر Synchronize clipboard & PSE instantly مزامنة الحافظة و PSE على الفور Clear Items on Exit مسح العناصر عند الخروج Synchronize history to storage instantly مزامنة التاريخ مع التخزين على الفور Confirm Clear History تأكيد مسح المحفوظات Sticky Items العناصر اللاصقة Sticky items are unchanged, always on top snippets in the menu العناصر اللاصقة لم تتغير ، ودائمًا ما تكون في أعلى المقتطفات في القائمة Add new item to the end of the list أضف عنصرًا جديدًا إلى نهاية القائمة &Add &اضافة Remove current item إزالة العنصر الحالي &Remove &حذف Move item up تحريك العنصر لأعلى &Up &أعلى Move item down تحريك العنصر لأسفل &Down &أسفل Network الشبكة Send Content to Network إرسال المحتوى إلى الشبكة Receive Content from Network تلقي المحتوى من الشبكة Port: المنفذ: Icon selection اختيار الايقونة Load icon from file... تحميل أيقونة من ملف ... Use default icon استخدام الايقونة الافتراضية Select icon file حدد ملف الايقونة Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) الصور (* .bmp * .jpg * .jpeg * .png * .svg * .tga) Select icon اختر الايقون Cancel إلغاء Look in: Label to describe the folder for icon file selection dialog. إنظر في: Icon name: اسم الايقونة: Icon type: نوع الايقونة: Add New Sticky Item إضافة عنصر لاصق جديد QlipperSystray C&lear clipboard history &مسح محفوظات الحافظة &Configure... &اعدادات... &About Qlipper... &عن كليبر ... &Quit &إنهاء Qlipper - a clipboard history applet كليبر - برنامج صغير لتاريخ الحافظة Yes نعم No لا Yes (experimental) نعم (تجريبي) About Qlipper عن كليبر Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 خفيفة الوزن ، عبر منصة صغيرة التاريخ الحافظة.<p style=";text-align:right;direction:rtl"> (ج) 2010-2016 Petr Vanek &lt;petr@yarpen.cz&gt;<p style=";text-align:right;direction:rtl"> <a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p style=";text-align:right;direction:rtl"> دعم اختصار لوحة المفاتيح العمومي:%1<br> دعم مشاركة حافظة الشبكة:%2 Confirm تأكيد Are you sure that you want to clear your clipboard history? هل أنت متأكد أنك تريد مسح تاريخ الحافظة الخاصة بك؟ pvanek-qlipper-d7b29d0/ts/qlipper_bg.ts000066400000000000000000000425601516742713700202330ustar00rootroot00000000000000 QObject Url: %1 Адрес: %1 Binary: %1 Бинарен: %1 Clipboard Системен буфер Selection Селекция Find Bufer Memòria intermèdia de Find Find Buffer Намери буфера Plain Text Обикновен текст Rich Text Обогатен текст Binary Content Бинарно съдържание URL URL адрес Sticky Item (Plain Text) Прикрепен елемент (обикновен текст) QlipperModel Welcome to the Qlipper clipboard history applet Добре дошли в Qlipper, аплета на историята на системния буфер QlipperPreferencesDialog Qlipper Preferences Настройки на Qlipper Preferences Предпочитания Keyboard Shortcut: Клавишна комбинация: Change global keyboard shortcut to invoke the menu on screen Променете глобалната клавишна комбинация, за да извикате менюто на екрана Clipboard Entries Count: Брой записи в клипборда: The maximum count of dynamic items in the menu Максималният брой динамични елементи в менюто entries записи Maximum Display Size: Максимален размер на показване: How long is the preview text in the menu Колко дълъг е текстът за визуализация в менюто characters символи Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Използвайте разширения на клипборда (X11 Selections, OS X Find Buffer), когато се поддържат Use Platform Specific Extensions (Advanced) Използвайте разширения, специфични за платформата (разширени) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Приложимо е за по-големи текстови блокове, копирани, например от фиктивни терминали (minicom и др.) Trim Whitespaces for Every Line Изрязване на празните места за всеки ред Tray icon image: Изображение за иконата в областта за уведомяване: No synchronization of clipboard & PSE Няма синхронизация на клипборда и PSE Synchronize clipboard & PSE when item selected Синхронизиране на клипборда и PSE, когато е избран елемент Synchronize clipboard & PSE instantly Синхронизиране на клипборда и PSE незабавно Clear Items on Exit Изчистване на елементите при изход Synchronize history to storage instantly Синхронизиране на историята с хранилището незабавно Confirm Clear History Потвърждаване изчистването на историята Sticky Items Прикрепване на елементи Sticky items are unchanged, always on top snippets in the menu Прикрепените елементи са непроменени, винаги в горните фрагменти на менюто Add new item to the end of the list Добавяне на нов елемент в края на списъка &Add &Добавяне Remove current item Премахване на текущ елемент &Remove &Премахване Move item up Преместване на елемента нагоре &Up &Нагоре Move item down Преместване на елемента надолу &Down &Надолу Network Мрежа Send Content to Network Изпрати съдържанието по мрежата Receive Content from Network Получаване на съдържание от мрежата Port: Порт: Icon selection Избор на икона Load icon from file... Зареждане на икона от файл... Use default icon Използване на стандартна икона Select icon file Избор на файл с икона Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Изображения (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Избор на икона Cancel Отказ Look in: Label to describe the folder for icon file selection dialog. Виж в: Icon name: Име на икона: Icon type: Тип на икона: Add New Sticky Item Добавяне на нов прикрепен елемент QlipperSystray C&lear clipboard history Изчистване на историята на клипборда &Configure... &Конфигуриране... &About Qlipper... &За Qlipper.. &Quit &Изход Qlipper - a clipboard history applet Qlipper - аплет за историята на системния буфер Yes Да No Не Yes (experimental) Да (експериментално) About Qlipper За Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Лек, многоплатформен аплет за история на клипборда.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek /qlipper/">https://github.com/pvanek/qlipper/</a><p>Поддръжка за глобална клавишна комбинация: %1<br>Поддръжка за споделяне на мрежов клипборд: %2 Confirm Потвърждаване Are you sure that you want to clear your clipboard history? Сигурни ли сте, че искате да изчистите историята на клипборда си? pvanek-qlipper-d7b29d0/ts/qlipper_ca.ts000066400000000000000000000376731516742713700202370ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 Binari: %1 Clipboard Porta-retalls Selection Selecció Find Bufer Memòria intermèdia de Find Find Buffer Cerca la memòria intermèdia Plain Text Text pla Rich Text Text ric Binary Content Contingut en binari URL Sticky Item (Plain Text) Element exganxós (text pla) QlipperModel Welcome to the Qlipper clipboard history applet Benvingut a la miniaplicació de l'historial del porta-retalls Qlipper QlipperPreferencesDialog Qlipper Preferences Preferències de Qlipper Preferences Preferències Keyboard Shortcut: Drecera de teclat: Change global keyboard shortcut to invoke the menu on screen Canvia la drecera de teclat global per a invocar el menú en pantalla Clipboard Entries Count: Nombre d'entrades del porta-retalls: The maximum count of dynamic items in the menu El nombre màxim d'ítems dinàmics al menú entries entrades Maximum Display Size: Mida màxima de la visualització: How long is the preview text in the menu Com de gran és el text de la vista prèvia al menú characters caràcters Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Utilitza les extensions del porta-retalls (seleccions de X11, memòria intermèdia de Find de l'OS X) Use Platform Specific Extensions (Advanced) Utilitza les extensions específiques de la plataforma (avançat) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) És útil per als blocs de text copiats més grans, per exemple des de terminals senzilles (minicom, etc.) Trim Whitespaces for Every Line Retalla els espas en blanc per a cada línia Tray icon image: Imatge de la icona de la safata: No synchronization of clipboard & PSE Porta-retalls i PSE sense sincronitzar Synchronize clipboard & PSE when item selected Sincronitza el porta-retalls i el PSE quan se selecciona l'ítem Synchronize clipboard & PSE instantly Sincronitza instantàniament el porta-retalls i el PSE Clear Items on Exit Neteja els ítems amb la sortida Synchronize history to storage instantly Sincronitza instantàniament l'historial l'emmagatzematge Confirm Clear History Confirma la neteja de l'historial Sticky Items Elements enganxosos Sticky items are unchanged, always on top snippets in the menu Els elements enganxosos estan sense canviar, sempre en la part superior dels fragments al menú Add new item to the end of the list Afegeix l'ítem nou al final de la llista &Add &Afegeix Remove current item Suprimeix l'ítem actual &Remove Supr&imeix Move item up Mou l'ítem amunt &Up Am&unt Move item down Mou l'ítem avall &Down A&vall Network Xarxa Send Content to Network Envia el contingut a la xarxa Receive Content from Network Rep el contingut de la xarxa Port: Port: Icon selection Selecció de la icona Load icon from file... Carrega la icona del fitxer... Use default icon Utilitza la icona predeterminada Select icon file Selecciona el fitxer de la icona Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Imatges (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Selecciona la icona Cancel Cancel·la Look in: Label to describe the folder for icon file selection dialog. Mira a: Icon name: Nom de la icona: Icon type: Tipus d'icona: Add New Sticky Item Afegeix un element enganxós nou QlipperSystray C&lear clipboard history Neteja l'historial del porta-reta&lls &Configure... &Configura... &About Qlipper... Qu&ant a Qlipper... &Quit &Surt Qlipper - a clipboard history applet Qlipper - una miniaplicació de l'historial del porta-retalls Yes No No Yes (experimental) Sí (experimental) About Qlipper Quant a Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Miniaplicació de l'historial del porta-retalls, lleugera i de plataforma creuada.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Admet la drecera de teclat global: %1<br>Admet compartició del porta-retalls de xarxa: %2 Confirm Confirma Are you sure that you want to clear your clipboard history? Segur que voleu esborrar l'historial del porta-retalls? pvanek-qlipper-d7b29d0/ts/qlipper_cs.ts000066400000000000000000000374171516742713700202550ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 Binární soubor: %1 Clipboard Schránka Selection Výběr Find Bufer Vyrovnávací paměť hledání Find Buffer Vyrovnávací paměť hledání Plain Text Prostý text Rich Text Formátovaný text Binary Content Binární obsah URL Sticky Item (Plain Text) Trvalá položka (prostý text) QlipperModel Welcome to the Qlipper clipboard history applet Vítá vás Qlipper, správce systémové schránky QlipperPreferencesDialog Qlipper Preferences Předvolby pro Qlipper Preferences Předvolby Keyboard Shortcut: Klávesová zkratka: Change global keyboard shortcut to invoke the menu on screen Změnit globální klávesovou zkratku pro vyvolání nabídky na obrazovce Clipboard Entries Count: Počet položek schránky: The maximum count of dynamic items in the menu Nejvyšší počet dynamických položek v nabídce entries položek Maximum Display Size: Největší velikost zobrazení: How long is the preview text in the menu Jak dlouho uchovat náhledový text v nabídce characters znaků Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Použít doplňková vylepšení schránky (X11 Selections, OS X Find Buffer), pokud je to možné Use Platform Specific Extensions (Advanced) Použit systémově závislá rozšíření (pokročilé) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Užitečné pro větší kusy textu kopírované například z terminálů (minicom, atd.) Trim Whitespaces for Every Line Ze všech řádků odstranit prázdné znaky Tray icon image: Obrázek ikony v oznamovací oblasti panelu: No synchronization of clipboard & PSE Žádná synchronizace schránky s PSE Synchronize clipboard & PSE when item selected Synchronizovat schránku a PSE při vybrání položky Synchronize clipboard & PSE instantly Synchronizovat schránku a PSE okamžitě Clear Items on Exit Vyprázdnit položky při ukončení Synchronize history to storage instantly Synchronizovat historii s úložištěm okamžitě Confirm Clear History Před vyprázdněním historie si vyžádat potvrzení Sticky Items Trvalé položky Sticky items are unchanged, always on top snippets in the menu Trvalé položky se nemění, stále se budou nacházet na vrcholu nabídky Add new item to the end of the list Přidat novou položku na konec seznamu &Add Přid&at Remove current item Smazat vybranou položku &Remove S&mazat Move item up Posunout nahoru &Up Nahor&u Move item down Posunout dolů &Down &Dolů Network Síť Send Content to Network Odeslat obsah po síti Receive Content from Network Přijmout obsah ze sítě Port: Port: Icon selection Výběr ikony Load icon from file... Načíst ikonu ze souboru… Use default icon Použít výchozí ikonu Select icon file Vybrat soubor s ikonou Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Obrázky (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Vybrat ikonu Cancel Storno Look in: Label to describe the folder for icon file selection dialog. Hledat v: Icon name: Název ikony: Icon type: Typ ikony: Add New Sticky Item Přidat novou trvalou položku QlipperSystray C&lear clipboard history &Smazat historii schránky &Configure... &Nastavit… &About Qlipper... O &aplikaci Qlipper… &Quit &Ukončit Qlipper - a clipboard history applet Qlipper – správce historie schránky Yes Ano No Ne Yes (experimental) Ano (experimentální) About Qlipper O aplikaci Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Na systémové prostředky nenáročná miniaplikace pro práci s historií schránky, fungující ve vícero operačních systémech.<p>©&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Podpora pro globální klávesové zkratky: %1<br>Podpora pro sdílení schránky po síti: %2 Confirm Potvrdit Are you sure that you want to clear your clipboard history? Opravdu chcete vyprázdnit historii schránky? pvanek-qlipper-d7b29d0/ts/qlipper_da.ts000066400000000000000000000367501516742713700202330ustar00rootroot00000000000000 QObject Url: %1 Url: %1 Binary: %1 Binær: %1 Clipboard Udklipsholder Selection Markering Find Bufer Find buffer Find Buffer Find buffer Plain Text Ren tekst Rich Text Formateret tekst Binary Content Binært indhold URL URL Sticky Item (Plain Text) Fastgjort punkt (ren tekst) QlipperModel Welcome to the Qlipper clipboard history applet Velkommen til Qlipper udklipsholderhistorik-appletten QlipperPreferencesDialog Qlipper Preferences Qlipper-præferencer Preferences Præferencer Keyboard Shortcut: Tastaturgenveje: Change global keyboard shortcut to invoke the menu on screen Skift global tastaturgenvej til visning af menuen på skærmen Clipboard Entries Count: Antal udklipsholderposter: The maximum count of dynamic items in the menu Maksimale antal dynamiske punkter i menuen entries poster Maximum Display Size: Maksimale visningsstørrelse: How long is the preview text in the menu Hvor længe teksten forhåndsvises i menuen characters tegn Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Brug udklipsholder-udvidelser (X11-markeringer, OS X-Find buffer) når det understøttes Use Platform Specific Extensions (Advanced) Brug platformsspecifikke udvidelser (avanceret) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Nyttig til større tekstblokke kopieret fra f.eks. dummy-terminaler (minicom, osv.) Trim Whitespaces for Every Line Beskær blanktegn på hver linje Tray icon image: Billede til bakkeikon: No synchronization of clipboard & PSE Ingen synkronisering af udklipsholder og PSE Synchronize clipboard & PSE when item selected Synkroniser udklipsholder og PSE når punkt er valgt Synchronize clipboard & PSE instantly Synkroniser udklipsholder og PSE med det samme Clear Items on Exit Ryd punkter ved afslutning Synchronize history to storage instantly Synkroniser historik til lager med det samme Confirm Clear History Bekræft ryd historik Sticky Items Fastgjorte punkter Sticky items are unchanged, always on top snippets in the menu Fastgjorte punkter er uændrede, altid over snippets i menuen Add new item to the end of the list Tilføj nyt punkt til slutningen af listen &Add &Tilføj Remove current item Fjern nuværende punkt &Remove &Fjern Move item up Flyt punkt op &Up &Op Move item down Flyt punkt ned &Down &Ned Network Netværk Send Content to Network Send indhold til netværk Receive Content from Network Modtag indhold fra netværk Port: Port: Icon selection Valg af ikon Load icon from file... Indlæs ikon fra fil... Use default icon Brug standardikon Select icon file Vælg ikonfil Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Billeder (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Vælg ikon Cancel Annuller Look in: Label to describe the folder for icon file selection dialog. Kig i: Icon name: Ikonnavn: Icon type: Ikontype: Add New Sticky Item Tilføj nyt fastgjort punkt QlipperSystray C&lear clipboard history &Ryd udklipsholderens historik &Configure... &Konfigurer... &About Qlipper... &Om Qlipper... &Quit &Afslut Qlipper - a clipboard history applet Qlipper - et udklipsholderhistorik-applet Yes Ja No Nej Yes (experimental) Ja (eksperimentel) About Qlipper Om Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Letvægts, platformsuafhængig udklipsholderhistorik-applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Understøttelse af globale tastaturgenveje: %1<br>Understøttelse af netværkdeling for udklipsholder: %2 Confirm Bekræft Are you sure that you want to clear your clipboard history? Er du sikker på, at du vil rydde din udklipsholderhistorik? pvanek-qlipper-d7b29d0/ts/qlipper_de.ts000066400000000000000000000402251516742713700202270ustar00rootroot00000000000000 QObject Url: %1 Shouldn't this be capitalized in English, too? URL: %1 Binary: %1 Binäres Objekt: %1 Clipboard Zwischenablage Selection Auswahl Find Bufer Should be "Buffer" in English. Find Bufer Find Buffer Buffer suchen Plain Text Klartext Rich Text Rich Text Binary Content Binärer Inhalt URL URL Sticky Item (Plain Text) Haftnotiz (einfacher Text) QlipperModel Welcome to the Qlipper clipboard history applet Translation is cropped, but full text doesn't get displayed in the list most of the time anyway. Willkommen beim Qlipper-Zwischenablagenverlauf-Applet QlipperPreferencesDialog Qlipper Preferences Qlipper-Einstellungen Preferences Einstellungen Keyboard Shortcut: Tastenkürzel: Change global keyboard shortcut to invoke the menu on screen Tastenkürzel zum Aufrufen der Liste gespeicherter Objekte festlegen Clipboard Entries Count: Anzahl der Einträge in der Zwischenablage: The maximum count of dynamic items in the menu Maximale Anzahl in der Liste mit gespeicherten Objekten gezeigter Einträge entries Einträge Maximum Display Size: Maximale Textlänge: How long is the preview text in the menu Maximale Länge einzelner Einträge in Liste gespeicherter Objekte characters Zeichen Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Erweiterte Funktionen wie "Selections" des X Window Systems oder "Find Buffer" unter Mac OS X verwenden, falls unterstützt Use Platform Specific Extensions (Advanced) Plattformspezifische Erweiterungen verwenden Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Nützlich beim Kopieren größerer Textbausteine, beispielsweise aus Terminalemulatoren Trim Whitespaces for Every Line Überschüssige Leerstellen in jeder Zeile entfernen Tray icon image: Taskleistensymbol: No synchronization of clipboard & PSE Keine Synchronisation der Zwischenablage mit PSE Synchronize clipboard & PSE when item selected Synchronisiere Zwischenablage mit PSE, wenn ein Objekt gewählt wird Synchronize clipboard & PSE instantly Zwischenablage & PSE sofort synchronisieren Clear Items on Exit Elemente beim Beenden löschen Synchronize history to storage instantly Verlauf sofort mit dem Speicher synchronisieren Confirm Clear History Löschen des Verlaufs bestätigen Sticky Items Haftnotizen Sticky items are unchanged, always on top snippets in the menu Haftnotizen sind manuell eingebene Textelemente, die immer am Anfang der Liste gespeicherter Objekte angezeigt werden Add new item to the end of the list Haftnotiz hinzufügen &Add &Hinzufügen Remove current item Haftnotiz entfernen &Remove &Entfernen Move item up Haftnotiz nach oben verschieben &Up Nach &oben Move item down Haftnotiz nach unten verschieben &Down Nach &unten Network Netzwerk Send Content to Network Objekte ins Netzwerk versenden Receive Content from Network Objekte aus dem Netzwerk empfangen Port: Port: Icon selection Symbolauswahl Load icon from file... Symbol aus Datei laden... Use default icon Standardsymbol verwenden Select icon file Symboldatei auswählen Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Bilder (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Symbol auswählen Cancel Abbrechen Look in: Label to describe the folder for icon file selection dialog. Nachsehen in: Icon name: Symbolname: Icon type: Symboltyp: Add New Sticky Item Neue Haftnotiz hinzufügen QlipperSystray C&lear clipboard history Zwischenablagenverlauf &löschen &Configure... &Konfigurieren... &About Qlipper... &Über Qlipper... &Quit &Beenden Qlipper - a clipboard history applet Qlipper - ein Zwischenablagenverlaufs-Applet Yes Ja No Nein Yes (experimental) Ja (experimentell) About Qlipper Über Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Leichtgewichtiges, plattformübergreifendes Zwischenablagenverlaufs-Applet<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Tastenkürzel unterstützt: %1<br>Austausch der Zwischenablage via Netzwerk unterstützt: %2 Confirm Bestätigen Are you sure that you want to clear your clipboard history? Sind Sie sicher, dass Sie Ihren Zwischenablageverlauf löschen möchten? pvanek-qlipper-d7b29d0/ts/qlipper_es.ts000066400000000000000000000375441516742713700202600ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 Binario: %1 Clipboard Portapapeles Selection Selección Find Bufer Buscar búfer Find Buffer Buscar en el búfer Plain Text Texto sin formato Rich Text Texto enriquecido Binary Content Contenido binario URL URL Sticky Item (Plain Text) Elemento anclado (texto sin formato) QlipperModel Welcome to the Qlipper clipboard history applet Le damos la bienvenida a la miniaplicación del histórico del portapapeles Qlipper QlipperPreferencesDialog Qlipper Preferences Preferencias de Qlipper Preferences Preferencias Keyboard Shortcut: Atajo de teclado: Change global keyboard shortcut to invoke the menu on screen Cambia el atajo global de teclado para invocar el menú en pantalla Clipboard Entries Count: Número de entradas en el portapapeles: The maximum count of dynamic items in the menu El número máximo de elementos dinámicos en el menú entries entradas Maximum Display Size: Tamaño máximo de visualización: How long is the preview text in the menu Cómo de larga es la vista previa del texto en el menú characters caracteres Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Usar extensiones del portapapeles (Selecciones de X11, Buscar búffer de OS X) cuando sea posible Use Platform Specific Extensions (Advanced) Usar extensiones específicas de la plataforma (Avanzado) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Útil con bloques de texto más grandes copiados por ejemplo de terminales falsas (minicom, etc.) Trim Whitespaces for Every Line Recortar los espacios blancos de las líneas Tray icon image: Imagen del icono de la bandeja: No synchronization of clipboard & PSE No sincronizar el portapales y PSE Synchronize clipboard & PSE when item selected Sincronizar portapapeles y PSE al seleccionar un elemento Synchronize clipboard & PSE instantly Sincronizar portapapeles y PSE instantáneamente Clear Items on Exit Borrar los elementos al salir Synchronize history to storage instantly Sincronizar el historial con el guardado instantáneamente Confirm Clear History Confirmar Limpiar Historial Sticky Items Elementos anclados Sticky items are unchanged, always on top snippets in the menu Los elementos anclados no cambian y siempre están en la parte superior del menú Add new item to the end of the list Añadir un elemento nuevo al final de la lista &Add &Añadir Remove current item Borrar el elemento actual &Remove &Borrar Move item up Mover el elemento hacia arriba &Up &Arriba Move item down Mover el elemento hacia abajo &Down &Abajo Network Red Send Content to Network Enviar el contenido a la red Receive Content from Network Recibir contenido de la red Port: Puerto: Icon selection Selección del icono Load icon from file... Cargar icono desde archivo... Use default icon Usar icono predefinido Select icon file Seleccionar el archivo del icono Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Imágenes (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Seleccione un icono Cancel Cancelar Look in: Label to describe the folder for icon file selection dialog. Buscar en: Icon name: Nombre del icono: Icon type: Tipo de icono: Add New Sticky Item Añadir un elemento anclado nuevo QlipperSystray C&lear clipboard history Borrar e&l historial del portapapeles &Configure... &Configurar... &About Qlipper... &Acerca de Qlipper... &Quit &Salir Qlipper - a clipboard history applet Qlipper - una miniaplicación para el historial del portapapeles Yes No No Yes (experimental) Sí (experimental) About Qlipper Acerca de Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Miniaplicación para el historial del portapapeles ligera y multiplaforma.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Soporte para atajos de teclado globales: %1<br>Soporte para compartir el portapapeles en red: %2 Confirm Confirmar Are you sure that you want to clear your clipboard history? ¿Confirma que quiere vaciar el histórico del portapapeles? pvanek-qlipper-d7b29d0/ts/qlipper_et.ts000066400000000000000000000372531516742713700202560ustar00rootroot00000000000000 QObject Url: %1 Veebiaadress: %1 Binary: %1 Binaarsed andmed: %1 Clipboard Lõikelaud Selection Valik Find Bufer Memòria intermèdia de Find Find Buffer Otsi ajaloost Plain Text Vormindamata tekst Rich Text Vormindatud tekst Binary Content Binaarne sisu URL URL Sticky Item (Plain Text) Püsikirje (vormindamata tekst) QlipperModel Welcome to the Qlipper clipboard history applet Tore, et kasutad lõikelaua ajaloo haldamiseks Qlipper'it QlipperPreferencesDialog Qlipper Preferences Qlipper'i seadistused Preferences Üldised seadistused Keyboard Shortcut: Kiirklahv: Change global keyboard shortcut to invoke the menu on screen Muuda üldist kiirklahvi, mis käivitab lõikelaua ekraanimenüü Clipboard Entries Count: Lõikelaua kirjete arv: The maximum count of dynamic items in the menu Suurim kirjete arv, mida lõikelaua menüüs kuvame entries kirjet Maximum Display Size: Kirje kuvatav pikkus: How long is the preview text in the menu Kui pikka eelvaadet me lõikelaua menüüs kuvame characters tähemärki Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Kasuta lõikelaua lisavõimalusi, kui need on toetatud (X11 Selections, OS X Find Buffer) Use Platform Specific Extensions (Advanced) Kasuta operatsioonisüsteemi-kohaseid lisavõimalusi (OSKLV) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Seda on hea kasutada suuremate tekstiblokkide kopeerimisel lihtsatest terminalidest (minicom, jne) Trim Whitespaces for Every Line Eemalda ridedelt tühimärgid Tray icon image: Pilt paneeliikoonil: No synchronization of clipboard & PSE Ära sünkroniseeri kirjeid lõikelaua ja OSKLV vahel Synchronize clipboard & PSE when item selected Valimisel sünkroniseeri kirjed lõikelaua ja OSKLV vahel Synchronize clipboard & PSE instantly Koheselt sünkroniseeri kirjed lõikelaua ja OSKLV vahel Clear Items on Exit Sulgemisel kustuta kõik kirjed Synchronize history to storage instantly Salvesta ajalugu koheselt Confirm Clear History Kinnita, et soovid ajaloo kustutada Sticky Items Kleepuvad kirjed Sticky items are unchanged, always on top snippets in the menu Kleepuvad kirjed ei muutu ning asuvad loendi ülaosas Add new item to the end of the list Lisa uus kirje loendi lõppu &Add &Lisa Remove current item Kustuta valitud kirje &Remove &Kustuta Move item up Liiguta kirje ülespoole &Up &Üles Move item down Liiguta kirje allapoole &Down &Alla Network Võrk Send Content to Network Luba teistel lugeda sinu kirjeid võrgust Receive Content from Network Luba sinul lugeda teiste kirjeid võrgust Port: Võrguport: Icon selection Ikooni valik Load icon from file... Laadi ikoon failist... Use default icon Kasuta vaikimisi ikooni Select icon file Vali ikoonifail Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Pildifailid (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Vali ikoon Cancel Tühista Look in: Label to describe the folder for icon file selection dialog. Otsi kaustast: Icon name: Ikooni nimi: Icon type: Ikooni tüüp: Add New Sticky Item Lisa uus kleepuv kirje QlipperSystray C&lear clipboard history Kustuta &lõikelaua ajalugu &Configure... &Seadista... &About Qlipper... Rakenduse Qlipper te&ave... &Quit &Välju Qlipper - a clipboard history applet Qlipper - lõikelaua ajalugu haldav rakendus Yes Jah No Ei Yes (experimental) Yah (katseline) About Qlipper Rakenduse Qlipper teave Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Lihtne ja väike ning mitmetel operatsioonisüsteemidel kasutatav lõikelaua ajaloo rakendus.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Üldiste kiirklahvide tugi: %1<br>Lõikelaua võrgus jagamise tugi: %2 Confirm Kinnita Are you sure that you want to clear your clipboard history? Kas sa oled kindel, et soovid kustutada kogu lõikelaua ajaloo? pvanek-qlipper-d7b29d0/ts/qlipper_fa.ts000066400000000000000000000353711516742713700202330ustar00rootroot00000000000000 QObject Url: %1 Binary: %1 Clipboard Selection Find Bufer Memòria intermèdia de Find Find Buffer Plain Text Rich Text Binary Content URL Sticky Item (Plain Text) QlipperModel Welcome to the Qlipper clipboard history applet QlipperPreferencesDialog Qlipper Preferences Preferences Keyboard Shortcut: Change global keyboard shortcut to invoke the menu on screen Clipboard Entries Count: The maximum count of dynamic items in the menu entries Maximum Display Size: How long is the preview text in the menu characters Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Use Platform Specific Extensions (Advanced) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Trim Whitespaces for Every Line Tray icon image: No synchronization of clipboard & PSE Synchronize clipboard & PSE when item selected Synchronize clipboard & PSE instantly Clear Items on Exit Synchronize history to storage instantly Confirm Clear History Sticky Items Sticky items are unchanged, always on top snippets in the menu Add new item to the end of the list &Add Remove current item &Remove Move item up &Up Move item down &Down Network Send Content to Network Receive Content from Network Port: Icon selection Load icon from file... Use default icon Select icon file Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Cancel Look in: Label to describe the folder for icon file selection dialog. Icon name: Icon type: Add New Sticky Item QlipperSystray C&lear clipboard history &Configure... &About Qlipper... &Quit Qlipper - a clipboard history applet Yes No Yes (experimental) About Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Confirm Are you sure that you want to clear your clipboard history? pvanek-qlipper-d7b29d0/ts/qlipper_fr.ts000066400000000000000000000400701516742713700202440ustar00rootroot00000000000000 QObject Url: %1 Url : %1 Binary: %1 Binaire : %1 Clipboard Presse-papiers Selection Sélection Find Bufer Memòria intermèdia de Find Find Buffer Trouver un tampon Plain Text Texte brut Rich Text Texte riche Binary Content Contenu binaire URL URL Sticky Item (Plain Text) Items permanents (texte brut) QlipperModel Welcome to the Qlipper clipboard history applet Bienvenue dans l'applet d'historique de presse-papiers Qlipper QlipperPreferencesDialog Qlipper Preferences Préférences de Qlipper Preferences Préférences Keyboard Shortcut: Raccourci clavier : Change global keyboard shortcut to invoke the menu on screen Modifier le raccourci clavier global pour afficher le menu à l'écran Clipboard Entries Count: Nombre d'entrées du presse papier : The maximum count of dynamic items in the menu Le nombre maximum d'items dans le menu entries entrées Maximum Display Size: Taille d'affichage maximale : How long is the preview text in the menu Quelle taille fait le texte de l'aperçu dans le menu characters caractères Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Utiliser les extensions du presse-papiers (sélections X11, tampon de recherche OS X) lorsqu'elles sont prises en charge Use Platform Specific Extensions (Advanced) Utiliser des extensions spécifiques à la plate-forme (avancé) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Utile pour les blocs de texte copiés plus gros par exemple à partir de terminaux factices (minicom, etc.) Trim Whitespaces for Every Line Couper les espaces pour chaque ligne Tray icon image: Icône de la barre d'état : No synchronization of clipboard & PSE Pas de synchronisation du presse-papiers et du PSE Synchronize clipboard & PSE when item selected Synchroniser le presse-papiers et PSE lorsque l'élément est sélectionné Synchronize clipboard & PSE instantly Synchroniser instantanément le presse-papiers et le PSE Clear Items on Exit Effacer les éléments en quittant Synchronize history to storage instantly Synchroniser instantanément l'historique avec le stockage Confirm Clear History Confirmer la suppression de l'historique Sticky Items Items permanents Sticky items are unchanged, always on top snippets in the menu Les items permanents sont inchangés, toujours en haut dans le menu Add new item to the end of the list Ajouter un nouvel élément à la fin de la liste &Add &Ajouter Remove current item Supprimer l'élément actuel &Remove Supp&rimer Move item up Déplacer l'élément vers le haut &Up Ha&ut Move item down Déplacer l'élément vers le bas &Down Bas Network Réseau Send Content to Network Envoyer du contenu au réseau Receive Content from Network Recevoir du contenu du réseau Port: Port : Icon selection Sélectionner l'icône Load icon from file... Charger l'icône à partir d'un fichier ... Use default icon Utiliser l'icône par défaut Select icon file Sélectionner le fichier d'icône Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Sélectionner l'icône Cancel Annuler Look in: Label to describe the folder for icon file selection dialog. Voir dans : Icon name: Nom de l'icône : Icon type: Type d'icône : Add New Sticky Item Ajouter un nouvel élément permanent QlipperSystray C&lear clipboard history Effacer &l'historique du presse-papiers &Configure... &Configurer... &About Qlipper... &A propos de Qlipper... &Quit &Quitter Qlipper - a clipboard history applet Qlipper - une applet d'historique du presse-papiers Yes Oui No Non Yes (experimental) Oui (expérimental) About Qlipper A propos de Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Applet d'historique de presse-papiers léger et multiplateforme.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Prise en charge du raccourci clavier global : %1<br>Prise en charge du partage de presse-papiers en réseau : %2 Confirm Confirmer Are you sure that you want to clear your clipboard history? Voulez-vous vraiment effacer l'historique du presse-papiers ? pvanek-qlipper-d7b29d0/ts/qlipper_he.ts000066400000000000000000000404241516742713700202340ustar00rootroot00000000000000 QObject Url: %1 כתובת: %1 Binary: %1 בינרי: %1 Clipboard לוח גזירים Selection בחירה Find Bufer Memòria intermèdia de Find Find Buffer מכלא חיפוש Plain Text טקסט פשוט Rich Text טקסט עשיר Binary Content תוכן בינרי URL כתובת Sticky Item (Plain Text) פריט נעוץ (טקסט פשוט) QlipperModel Welcome to the Qlipper clipboard history applet ברוך בואך ליישומון היסטוריית לוח הגזירים Qlipper QlipperPreferencesDialog Qlipper Preferences העדפות Qlipper Preferences העדפות Keyboard Shortcut: קיצורי מקלדת: Change global keyboard shortcut to invoke the menu on screen החלפת קיצור המקלדת הגלובלי להקפצת תפריט על המסך Clipboard Entries Count: מספר רשומות לוח גזירים: The maximum count of dynamic items in the menu המספר המרבי של פריטים דינמיים בתפריט entries רשומות Maximum Display Size: גודל התצוגה המרבי: How long is the preview text in the menu מה יהיה אורך טקסט ההצגה המקדימה בתפריט characters תווים Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported להשתמש בהרחבות לוח גזירים (בחירות X11, מכלא חיפוש OS X) אם הן נתמכות Use Platform Specific Extensions (Advanced) להשתמש בהרחבות תואמות פלטפורמה (מתקדם) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) שימושי למקטעי טקסט גדולים יותר שהועתקו, למשל, ממסופים מוגבלים (minicon וכו׳) Trim Whitespaces for Every Line קיצוץ הרווחים הפותחים/סוגרים בכל שורה Tray icon image: תמונת סמל מגש מערכת: No synchronization of clipboard & PSE אין סנכרון של לוח הגזירים מול PSE Synchronize clipboard & PSE when item selected לסנכרן את לוח הגזירים מול PSE כשנבחר פריט Synchronize clipboard & PSE instantly לסנכרן את לוח הגזירים מול PSE מיידית Clear Items on Exit לפנות פריטים ביציאה Synchronize history to storage instantly לסנכרן את ההיסטוריה לאחסון מיידית Confirm Clear History לאשר פינוי ההיסטוריה Sticky Items פריטים נעוצים Sticky items are unchanged, always on top snippets in the menu הפריטים הנעוצים לא השתנו, מקטעים שתמיד נמצאים בראש התפריט Add new item to the end of the list להוסיף פריט חדש לסוף הרשימה &Add הו&ספה Remove current item הסרת הפריט הנוכחי &Remove הס&רה Move item up להעלות את הפריט &Up מ&עלה Move item down להוריד את הפריט &Down למ&טה Network רשת Send Content to Network שליחת תוכן לרשת Receive Content from Network קבלת תוכן מהרשת Port: פתחה: Icon selection בחירת סמל Load icon from file... טעינת סמל מקובץ… Use default icon להשתמש בסמל בררת המחדל Select icon file בחירת קובץ סמל Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) תמונות ‎(*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon בחירת סמל Cancel ביטול Look in: Label to describe the folder for icon file selection dialog. לחפש בתוך: Icon name: שם הסמל: Icon type: סוג הסמל: Add New Sticky Item הוספת פריט נעוץ חדש QlipperSystray C&lear clipboard history &פינוי היסטוריית לוח הגזירים &Configure... ה&גדרה… &About Qlipper... על &אודות Qlipper… &Quit י&ציאה Qlipper - a clipboard history applet Qlipper - יישומון היסטוריית לוח גזירים Yes כן No לא Yes (experimental) כן (ניסיוני) About Qlipper על אודות Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 יישומון היסטוריית לוח גזירים למגוון פלטפורמות.<p>(c)&nbsp;2010‏-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>תמיכה בקיצורי מקלדת גלובליית: %1<br>תמיכה בשיתוף לוח הגזירים ברשת: %2 Confirm אישור Are you sure that you want to clear your clipboard history? לפנות את היסטוריית לוח הגזירים שלך? pvanek-qlipper-d7b29d0/ts/qlipper_hi.ts000066400000000000000000000370121516742713700202370ustar00rootroot00000000000000 QObject Url: %1 Url: %1 Binary: %1 बायनरी : %1 Clipboard क्लिपबोर्ड Selection चयन Find Bufer Memòria intermèdia de Find Find Buffer बफ़र ढूंढें Plain Text सादा पाठ Rich Text समृद्ध पाठ Binary Content बाइनरी सामग्री URL URL Sticky Item (Plain Text) स्टिकी आइटम (सादा टेक्स्ट) QlipperModel Welcome to the Qlipper clipboard history applet Qlipper क्लिपबोर्ड इतिहास एप्लेट में आपका स्वागत है QlipperPreferencesDialog Qlipper Preferences Qlipper प्राथमिकताएं Preferences प्राथमिकताएं Keyboard Shortcut: कीबोर्ड शॉर्टकट : Change global keyboard shortcut to invoke the menu on screen स्क्रीन पर मेनू को लागू करने के लिए वैश्विक कीबोर्ड शॉर्टकट बदलें Clipboard Entries Count: क्लिपबोर्ड प्रविष्टियों की संख्या : The maximum count of dynamic items in the menu मेनू में गतिशील वस्तुओं की अधिकतम संख्या entries प्रविष्टियाँ Maximum Display Size: अधिकतम डिस्प्ले आकार : How long is the preview text in the menu मेनू में पूर्वावलोकन टेक्स्ट कितना लंबा है characters वर्ण Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Use Platform Specific Extensions (Advanced) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Trim Whitespaces for Every Line Tray icon image: No synchronization of clipboard & PSE Synchronize clipboard & PSE when item selected Synchronize clipboard & PSE instantly Clear Items on Exit Synchronize history to storage instantly Confirm Clear History Sticky Items Sticky items are unchanged, always on top snippets in the menu Add new item to the end of the list &Add Remove current item &Remove Move item up &Up Move item down &Down Network Send Content to Network Receive Content from Network Port: Icon selection Load icon from file... Use default icon Select icon file Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Cancel Look in: Label to describe the folder for icon file selection dialog. Icon name: Icon type: Add New Sticky Item QlipperSystray C&lear clipboard history &Configure... &About Qlipper... &Quit Qlipper - a clipboard history applet Yes No Yes (experimental) About Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Confirm Are you sure that you want to clear your clipboard history? pvanek-qlipper-d7b29d0/ts/qlipper_hr.ts000066400000000000000000000373701516742713700202570ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 Binarna datoteka: %1 Clipboard Međuspremnik Selection Odabir Find Bufer Memòria intermèdia de Find Find Buffer Pronađi tekst iz međuspremnika Plain Text Neformatiran tekst Rich Text Formatiran tekst Binary Content Binarni sadržaj URL URL Sticky Item (Plain Text) Fiksiran element (neformatiran tekst) QlipperModel Welcome to the Qlipper clipboard history applet Qlipper – programčić za povijest međuspremnika QlipperPreferencesDialog Qlipper Preferences Qlipper postavke Preferences Postavke Keyboard Shortcut: Tipkovni prečac: Change global keyboard shortcut to invoke the menu on screen Promijeni globalan tipkovni prečac za pozivanje izbornika na ekranu Clipboard Entries Count: Broj unosa iz međuspremnika: The maximum count of dynamic items in the menu Maksimalan broj dinamičkih elemenata u izborniku entries unosa Maximum Display Size: Maksimalna duljina teksta: How long is the preview text in the menu Maksimalna duljina prikazanog teksta u izborniku characters znaka Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Koristi proširenja međuspremnika (X11 Selections, OS X Find Buffer) ako ih sustav podržava Use Platform Specific Extensions (Advanced) Koristi platformska proširenja (napredno) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Korisno za veće tekstualne blokove, kopirane na primjer iz emulatora terminala (minicom itd.) Trim Whitespaces for Every Line Ukloni razmake u svakom retku Tray icon image: Slika za ikonu: No synchronization of clipboard & PSE Bez sinkronizacije međuspremnika i platformskih proširenja Synchronize clipboard & PSE when item selected Sinkroniziraj međuspremnik i platformska proširenja pri biranju elementa Synchronize clipboard & PSE instantly Sinkroniziraj međuspremnik i platformska proširenja odmah Clear Items on Exit Izbriši elemente pri zatvaranju programa Synchronize history to storage instantly Sinkroniziraj povijest s memorijom odmah Confirm Clear History Potvrdi brisanje povijesti Sticky Items Fiksirani elementi Sticky items are unchanged, always on top snippets in the menu Fiksirani elementi se ne mijenjaju, uvijek se nalaze na vrhu popisa u izborniku Add new item to the end of the list Dodaj novi element na kraj popisa &Add &Dodaj Remove current item Ukloni trenutačni element &Remove &Ukloni Move item up Pomakni element prema gore &Up &Gore Move item down Pomakni element prema dolje &Down &Dolje Network Mreža Send Content to Network Pošalji sadržaj na mrežu Receive Content from Network Primi sadržaj s mreže Port: Priključak: Icon selection Biranje ikone Load icon from file... Učitaj ikonu iz datoteke … Use default icon Koristi standardnu ikonu Select icon file Odaberi datoteku ikone Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Slike (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Odaberi ikonu Cancel Odustani Look in: Label to describe the folder for icon file selection dialog. Traži u: Icon name: Ime ikone: Icon type: Vrsta ikone: Add New Sticky Item Dodaj nov fiksirani element QlipperSystray C&lear clipboard history Iz&briši povijest međuspremnika &Configure... &Konfiuriraj … &About Qlipper... Qlipper &informacije … &Quit &Zatvori program Qlipper - a clipboard history applet Qlipper – programčić za povijest međuspremnika Yes Da No Ne Yes (experimental) Da (eksperimentalno) About Qlipper Qlipper informacije Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Jednostavan višeplatformski programčić za povijest međuspremnika.<p>(c)&nbsp;2010.&nbsp;–&nbsp;2016.&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Podrška za globalan tipkovni prečac: %1<br>Podrška za mrežno dijeljenje međuspremnika: %2 Confirm Potvrdi Are you sure that you want to clear your clipboard history? Stvarno želiš izbrisati povijest međuspremnika? pvanek-qlipper-d7b29d0/ts/qlipper_hu.ts000066400000000000000000000363601516742713700202600ustar00rootroot00000000000000 QObject Url: %1 Url: %1 Binary: %1 Bináris: %1 Clipboard Vágólap Selection kiválasztás Find Bufer Memòria intermèdia de Find Find Buffer Puffer keresése Plain Text Egyszerű szöveg Rich Text Formázott szöveg Binary Content Bináris tartalom URL URL Sticky Item (Plain Text) QlipperModel Welcome to the Qlipper clipboard history applet Üdvözöljük a Qlipper vágólapelőzmény-kezelő kisalkalmazásban QlipperPreferencesDialog Qlipper Preferences Qlipper beállítások Preferences Beállítások Keyboard Shortcut: Gyorsbillentyű: Change global keyboard shortcut to invoke the menu on screen Clipboard Entries Count: Vágólap elemszáma: The maximum count of dynamic items in the menu A menüben megjelenő dinamikus elemek maximális száma entries elem Maximum Display Size: Maximális megjelenítési méret: How long is the preview text in the menu Milyen hosszú az előnézet szövege a menüben characters karakter Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Vágólap-kiterjesztések használata (X11 Kiválasztás, OS X keresés puffer), amikor az támogatott Use Platform Specific Extensions (Advanced) Platformspecifikus kiterjesztések használata ( haladó) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Hosszabb szövegek másolásához hasznos, például teszt terminálok (minicom, stb) Trim Whitespaces for Every Line Szóközök igazítása minden sorban Tray icon image: Tálcaikon: No synchronization of clipboard & PSE Ne kapcsolja össze a vágólapot és a PSE-t Synchronize clipboard & PSE when item selected Kapcsolja össze a vágólapot és a PSE-t, amikor az elem kiválasztásra került Synchronize clipboard & PSE instantly Azonnal kapcsolja össze a vágólapot és a PSE-t Clear Items on Exit Elemet törlése bezáráskor Synchronize history to storage instantly Előzmények azonnali összehangolása az előzményekkel Confirm Clear History Előzmények törlésének megerősítése Sticky Items Kényes elemek Sticky items are unchanged, always on top snippets in the menu Add new item to the end of the list &Add &hozzáadás Remove current item &Remove &Eltávolítás Move item up &Up &Fel Move item down &Down &Le Network Hálózat Send Content to Network Tartalom küldése hálózatra Receive Content from Network Tartalom fogadása hálózatról Port: Port: Icon selection Load icon from file... Use default icon Select icon file Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Képek (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Ikon kiválasztása Cancel Mégse Look in: Label to describe the folder for icon file selection dialog. Kiválasztás innen: Icon name: Ikonnév: Icon type: Ikontípus: Add New Sticky Item QlipperSystray C&lear clipboard history &Configure... &Beállítás... &About Qlipper... &Qlipper névjegye... &Quit &Kilépés Qlipper - a clipboard history applet Qlipper - vágólap előzménykezelő kisalkalmazás Yes Igen No Nem Yes (experimental) Igen (kísérleti) About Qlipper A Qlipper névjegye Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Confirm Megerősítés Are you sure that you want to clear your clipboard history? Biztosan törölni akarja a vágólapelőzményeket? pvanek-qlipper-d7b29d0/ts/qlipper_it.ts000066400000000000000000000370321516742713700202550ustar00rootroot00000000000000 QObject Url: %1 Binary: %1 File binario: %1 Clipboard Appunti Selection Selezione Find Bufer Trova coso Find Buffer Cerca Buffer Plain Text Testo semplice Rich Text Testo formattato Binary Content Contenuto file binario URL Sticky Item (Plain Text) Voce permanente (testo semplice) QlipperModel Welcome to the Qlipper clipboard history applet Benvenuto a Qlipper, l'applet per gli appunti QlipperPreferencesDialog Qlipper Preferences Preferenze di Qlipper Preferences Preferenze Keyboard Shortcut: Scorciatoia di tastiera: Change global keyboard shortcut to invoke the menu on screen Cambia scorciatoia gobale per mostrare il menu sullo schermo Clipboard Entries Count: Numero delle voci: The maximum count of dynamic items in the menu Il numero massimo delle voci da mostrare nel menu entries voci Maximum Display Size: Mostra i primi: How long is the preview text in the menu Lunghezza della anteprima nel menu characters caratteri Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Usa estensioni degli appunti se supportate (Selezioni X11, OS X Trova Buffer) Use Platform Specific Extensions (Advanced) Usa estensione specifiche della piattaforma (avanzato) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Utile per bocchi di testi grandi copiati da dummy-terminals (minicom ecc) Trim Whitespaces for Every Line Rimuovi spazi vuoti per ogni riga Tray icon image: Icona nel vassoio: No synchronization of clipboard & PSE Nessuna sincronizzazione tra apunti & PSE Synchronize clipboard & PSE when item selected Sincronizza appunti & PSE quando la voce è selezionata Synchronize clipboard & PSE instantly Sincronizza appunti & PSE immediatamente Clear Items on Exit Pulisci all'uscita Synchronize history to storage instantly Salva cronologia immediatamente Confirm Clear History Conferma cancellazione cronologia Sticky Items Voci permanenti Sticky items are unchanged, always on top snippets in the menu Le voci permanenti rimangono invariati, sempre in cima nel menu Add new item to the end of the list Aggiungi nuova voce in fondo alla lista &Add &Aggiungi Remove current item Rimuovi voce corrente &Remove &Rimuovi Move item up Sposta voce in su &Up &Su Move item down Sposta voce in giù &Down &Giù Network Rete Send Content to Network Invia contenuto in rete Receive Content from Network Ricevi contenuto dalla rete Port: Porta: Icon selection Seleziona icona Load icon from file... Carica icona da file... Use default icon Usa icona predefinita Select icon file Seleziona file icona Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Immagini (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Seleziona icona Cancel Cancella Look in: Label to describe the folder for icon file selection dialog. Cerca in: Icon name: Nome dell'icona: Icon type: Tipo dell'icona: Add New Sticky Item Aggiungi nuova voce permanente QlipperSystray C&lear clipboard history &Pulisci cronologia &Configure... &Configura... &About Qlipper... &Informazioni su Qlipper... &Quit &Esci Qlipper - a clipboard history applet Qlipper - un applicazione per gli appunti Yes No No Yes (experimental) Sì (sperimentale) About Qlipper A proposito di qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Un applet leggero e multipiattaforma per la cronologia degli appunti.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Supporto per le scorciatoie globali da tastiera: %1<br>Supporto per la condivisione degli appunti in rete: %2 Confirm Conferma Are you sure that you want to clear your clipboard history? Si è sicuro di voler cancellare la cronologia degli appunti? pvanek-qlipper-d7b29d0/ts/qlipper_ja.ts000066400000000000000000000402061516742713700202300ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 バイナリ: %1 Clipboard クリップボード Selection セレクション Find Buffer Find バッファ Plain Text プレーン テキスト Rich Text リッチ テキスト Binary Content バイナリ コンテンツ URL URL Sticky Item (Plain Text) 固定アイテム (プレーン テキスト) QlipperModel Welcome to the Qlipper clipboard history applet Qlipper クリップボード履歴アプレットへようこそ QlipperPreferencesDialog Qlipper Preferences Qlipper の設定 Preferences 設定 Clipboard Entries Count: クリップボードの履歴数: The maximum count of dynamic items in the menu メニューの履歴アイテムの最大数です entries Maximum Display Size: 最大表示サイズ: How long is the preview text in the menu メニューでプレビューするテキストの長さです characters 文字 Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) ダミー端末(minicom など)からコピーした大きなテキスト ブロックに便利です Trim Whitespaces for Every Line すべての行のホワイトスペースをトリミングする Keyboard Shortcut: ショートカットキー: Change global keyboard shortcut to invoke the menu on screen 画面上にメニューを呼び出す グローバル ショートカットキーを変更します Tray icon image: トレイ アイコンの画像: Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported クリップボード拡張機能 (X11 セレクション、OS X Find Buffer) が対応している場合は、それを使用します Use Platform Specific Extensions (Advanced) プラットフォーム固有の拡張機能を使用する(高度) No synchronization of clipboard & PSE クリップボードと PSE を同期しない Synchronize clipboard & PSE when item selected クリップボードと PSE をアイテムを選択した時に同期する Synchronize clipboard & PSE instantly クリップボードと PSE をすぐに同期する Clear Items on Exit 終了時に履歴を消去する Synchronize history to storage instantly すぐに履歴をストレージに同期させる Confirm Clear History 履歴の消去時に確認する Sticky Items 固定アイテム Sticky items are unchanged, always on top snippets in the menu 固定アイテムは変更されず、常にメニューの上部に表示されます Add new item to the end of the list 新しいアイテムをリストの最後に追加します &Add 追加(&A) Remove current item 選択しているアイテムを削除します &Remove 削除(&R) Move item up アイテムを上へ移動します &Up 上へ(&U) Move item down アイテムを下へ移動します &Down 下へ(&D) Network ネットワーク Send Content to Network 内容をネットワークへ送信する Receive Content from Network 内容をネットワークから受信する Port: ポート: Icon selection アイコンの選択 Load icon from file... ファイルからアイコンの読み込み... Use default icon 標準のアイコンを使用する Select icon file アイコンのファイルを選択 Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) 画像 (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon アイコンの選択 Cancel キャンセル Look in: Label to describe the folder for icon file selection dialog. 参照する場所: Icon name: アイコンの名前: Icon type: アイコンの種類: Add New Sticky Item 新しい固定アイテムを追加する QlipperSystray C&lear clipboard history クリップボード履歴の消去(&L) &Configure... 設定(&C)... &About Qlipper... Qlipper について(&A)... &Quit 終了(&Q) Qlipper - a clipboard history applet Qlipper - クリップボード履歴アプレット Yes はい No いいえ Yes (experimental) はい (実験用) About Qlipper Qlipper について Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 軽量でクロスプラットホームのクリップボード履歴アプレットです。<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>グローバル・ショートカットキーに対応: %1<br>ネットワークでクリップボードの共有に対応: %2 Confirm 確認 Are you sure that you want to clear your clipboard history? 本当にクリップボード履歴を消去しますか? pvanek-qlipper-d7b29d0/ts/qlipper_ko.ts000066400000000000000000000373671516742713700202650ustar00rootroot00000000000000 QObject Url: %1 Url: %1 Binary: %1 바이너리: %1 Clipboard 클립보드 Selection 선택 항목 Find Bufer Memòria intermèdia de Find Find Buffer 버퍼 찾기 Plain Text 일반 텍스트 Rich Text 서식 있는 텍스트 Binary Content 바이너리 콘텐츠 URL URL Sticky Item (Plain Text) 고정 항목 (일반 텍스트) QlipperModel Welcome to the Qlipper clipboard history applet Qlipper 클립보드 내역 애플릿에 오신 것을 환영합니다 QlipperPreferencesDialog Qlipper Preferences Qlipper 기본 설정 Preferences 기본 설정 Keyboard Shortcut: 키보드 단축키: Change global keyboard shortcut to invoke the menu on screen 화면의 메뉴를 호출하도록 전역 키보드 단축키 변경 Clipboard Entries Count: 클립보드 항목 수: The maximum count of dynamic items in the menu 메뉴의 최대 동적 항목 수 entries 항목 Maximum Display Size: 최대 디스플레이 크기: How long is the preview text in the menu 메뉴의 미리보기 텍스트 길이 characters 문자 Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported 지원되는 경우 클립보드 확장(X11 Selections, OS X Find Buffer) 사용 Use Platform Specific Extensions (Advanced) 플랫폼별 확장 사용(고급) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) 예를 들어 더미 터미널에서 복사된 더 큰 텍스트 블록에 유용함 (미니컴 등) Trim Whitespaces for Every Line 모든 줄의 공백 자르기 Tray icon image: 트레이 아이콘 이미지: No synchronization of clipboard & PSE 클립보드 및 PSE 동기화 없음 Synchronize clipboard & PSE when item selected 항목 선택 시 클립보드 및 PSE 동기화 Synchronize clipboard & PSE instantly 클립보드와 PSE를 즉시 동기화 Clear Items on Exit 종료 시 항목 비우기 Synchronize history to storage instantly 내역을 저장소에 즉시 동기화하기 Confirm Clear History 내역 비우기 확인하기 Sticky Items 고정 항목 Sticky items are unchanged, always on top snippets in the menu 고정 항목은 변경되지 않고 항상 메뉴의 상단 스니펫에 표시됩니다 Add new item to the end of the list 목록 끝에 새 항목 추가하기 &Add 추가하기(&A) Remove current item 현재 항목 제거하기 &Remove 제거하기(&R) Move item up 항목 위로 이동 &Up 위로(&U) Move item down 항목 아래로 이동 &Down 아래로(&D) Network 네트워크 Send Content to Network 네트워크로 콘텐츠 전송 Receive Content from Network 네트워크에서 콘텐츠 수신 Port: 포트: Icon selection 아이콘 선택 Load icon from file... 파일에서 아이콘 불러오기... Use default icon 기본 아이콘 사용 Select icon file 아이콘 파일 선택 Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) 이미지(*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon 아이콘 선택 Cancel 취소 Look in: Label to describe the folder for icon file selection dialog. 찾아보기: Icon name: 아이콘 이름: Icon type: 아이콘 유형: Add New Sticky Item 새 고정 항목 추가하기 QlipperSystray C&lear clipboard history 클립보드 내역 지우기(&L) &Configure... 구성하기(&C)... &About Qlipper... Qlipper 정보(&A)... &Quit 종료(&Q) Qlipper - a clipboard history applet Qlipper - 클립보드 내역 애플릿 Yes No 아니요 Yes (experimental) 예 (실험적) About Qlipper Qlipper 정보 Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 경량, 교차 플랫폼 클립보드 내역 애플릿입니다.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>전역 키보드 단축키 지원: %1<br>네트워크 클립보드 공유 지원: %2 한국어 번역: 이정희 <daemul72@gmail.com> Confirm 확인 Are you sure that you want to clear your clipboard history? 클립보드 내역을 비우시겠습니까? pvanek-qlipper-d7b29d0/ts/qlipper_lt.ts000066400000000000000000000374261516742713700202670ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 Dvejetainė: %1 Clipboard Iškarpinė Selection Žymėjimas Find Bufer Rasti buferį Find Buffer Paieškos buferis Plain Text Grynasis tekstas Rich Text Raiškusis tekstas Binary Content Dvejetainės turinys URL URL Sticky Item (Plain Text) Lipnus elementas (Grynasis tekstas) QlipperModel Welcome to the Qlipper clipboard history applet Sveiki atvykę į Qlipper iškarpinės istorijos programėlę QlipperPreferencesDialog Qlipper Preferences Qlipper nuostatos Preferences Nuostatos Keyboard Shortcut: Spartusis klavišas: Change global keyboard shortcut to invoke the menu on screen Keisti visuotinį spartųjį klavišą, kuris ekrane aktyvins meniu Clipboard Entries Count: Iškarpinės elementų skaičius: The maximum count of dynamic items in the menu Didžiausias meniu esančių dinaminių elementų skaičius entries elementų Maximum Display Size: Didžiausias rodomas dydis: How long is the preview text in the menu Kokio ilgio bus meniu esantis peržiūros tekstas characters simbolių Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Naudoti iškarpinės plėtinius, (X11 žymėjimus, OS X buferio radimą) kai tai palaikoma Use Platform Specific Extensions (Advanced) Naudoti platformai specifinius plėtinius (Išplėstinis) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Naudinga didesniems tekstų blokams nukopijuotiems, pvz., iš fiktyvių terminalų (minicom ir t.t.) Trim Whitespaces for Every Line Kiekvienoje eilutėje šalinti tarpus Tray icon image: Dėklo piktogramos paveikslas: No synchronization of clipboard & PSE Jokio iškarpinės ir PSP sinchronizavimo Synchronize clipboard & PSE when item selected Sinchronizuoti iškarpinę ir PSP, pažymėjus elementą Synchronize clipboard & PSE instantly Sinchronizuoti iškarpinę ir PSP nedelsiant Clear Items on Exit Išeinant, išvalyti elementus Synchronize history to storage instantly Sinchronizuoti istoriją į kaupiklį nedelsiant Confirm Clear History Klausti patvirtinimo išvalant istoriją Sticky Items Lipnūs elementai Sticky items are unchanged, always on top snippets in the menu Lipnūs elementai yra nekeičiami, meniu jie yra visada fragmentų viršuje Add new item to the end of the list Pridėti naują elementą į sąrašo galą &Add &Pridėti Remove current item Šalinti esamą elementą &Remove Š&alinti Move item up Pakelti elementą &Up A&ukštyn Move item down Nuleisti elementą &Down Ž&emyn Network Tinklas Send Content to Network Siųsti turinį į tinklą Receive Content from Network Gauti turinį iš tinklo Port: Prievadas: Icon selection Piktogramos pasirinkimas Load icon from file... Įkelti piktogramą iš failo... Use default icon Naudoti numatytąją piktogramą Select icon file Pasirinkti piktogramos failą Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Paveikslai (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Pasirinkti piktogramą Cancel Atsisakyti Look in: Label to describe the folder for icon file selection dialog. Ieškoti: Icon name: Piktogramos pavadinimas: Icon type: Piktogramos tipas: Add New Sticky Item Pridėti naują lipnų elementą QlipperSystray C&lear clipboard history Išva&lyti iškarpinės istoriją &Configure... &Konfigūruoti... &About Qlipper... &Apie Qlipper... &Quit &Išeiti Qlipper - a clipboard history applet Qlipper – iškarpinės istorijos programėlė Yes Taip No Ne Yes (experimental) Taip (eksperimentinis) About Qlipper Apie Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Supaprastinta, daugiaplatformė iškarpinės istorijos programėlė.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Visuotinio sparčiojo klavišo palaikymas: %1<br>Tinklo iškarpinės bendrinimo palaikymas: %2 Confirm Patvirtinti Are you sure that you want to clear your clipboard history? Ar tikrai norite išvalyti iškarpinės istoriją? pvanek-qlipper-d7b29d0/ts/qlipper_nb_NO.ts000066400000000000000000000374271516742713700206440ustar00rootroot00000000000000 QObject Url: %1 Nettadresse: %1 Binary: %1 Kjørbar fil: %1 Clipboard Utklippstavle Selection Utvalg Find Bufer Memòria intermèdia de Find Find Buffer Finn mellomlager Plain Text Klartekst Rich Text Rik tekst Binary Content Binærfilsinnhold URL Nettadresse Sticky Item (Plain Text) Festet element (klartekst) QlipperModel Welcome to the Qlipper clipboard history applet Velkommen til miniprogrammet Qlipper for utklippstavlehistorikk QlipperPreferencesDialog Qlipper Preferences Qlipper-innstillinger Preferences Innstillinger Keyboard Shortcut: Tastatursnarvei: Change global keyboard shortcut to invoke the menu on screen Endre snarvei for å vise menyen Clipboard Entries Count: Utklippstavleoppføringsantall: The maximum count of dynamic items in the menu Maksimalt antall dynamiske elementer i menyen entries oppføringer Maximum Display Size: Maksimal skjermstørrelse: How long is the preview text in the menu Hvor lenge tekst forhåndsvises i menyen characters tegn Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Bruk utklippstavleutvidelser (X11-utvalg, macOS Find-mellomlager) når det støttes Use Platform Specific Extensions (Advanced) Bruk plattformsspesifikke utvidelser (avansert) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Nyttig for større tekstblokker kopiert for eksempel fra dumme terminaler (minicom, osv.) Trim Whitespaces for Every Line Beskjær ekstra blanktegn for hver linje Tray icon image: Bilde for systemkurvsikon: No synchronization of clipboard & PSE Ingen synkronisering av utklippstavle og PSE Synchronize clipboard & PSE when item selected Synkroniser utklippstavle og PSE når element velges Synchronize clipboard & PSE instantly Synkroniser utklippstavle og PSE umiddelbart Clear Items on Exit Tøm elementer ved avslutning Synchronize history to storage instantly Synkroniser historikk til lagring umiddelbart Confirm Clear History Bekreft tømming av historikk Sticky Items Festede elementer Sticky items are unchanged, always on top snippets in the menu Festede elementer er uendret, alltid tilgjengelig på toppen i menyen Add new item to the end of the list Legg til nytt element på slutten av listen &Add &Legg til Remove current item Fjern nåværende element &Remove &Fjern Move item up Flytt element ↑ &Up &Oppover Move item down Flytt element nedover &Down &Nedover Network Nettverk Send Content to Network Send innhold til nettverk Receive Content from Network Motta innhold fra nettverket Port: Port: Icon selection Ikonutvalg Load icon from file... Last inn ikon fra fil … Use default icon Bruk forvalgt ikon Select icon file Velg ikonfil Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Bilder (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Velg ikon Cancel Avbryt Look in: Label to describe the folder for icon file selection dialog. Let i: Icon name: Ikonnavn: Icon type: Ikontype: Add New Sticky Item Legg til nytt festet element QlipperSystray C&lear clipboard history T&øm utklippstavlehistorikk &Configure... & Sett opp … &About Qlipper... &Om Qlipper … &Quit &Avslutt Qlipper - a clipboard history applet Qlipper – et miniprogram for utklippstavlehistorikk Yes Ja No Nei Yes (experimental) Ja (eksperimentelt) About Qlipper Om Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Lett miniprogram for utklippstavlehistorikk på flere plattformer.<p>©&nbsp;2010–2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Støtte for tastatursnarveier på hele systemet: %1<br>Støtte for nettverksdeling av utklippstavle: %2 Confirm Bekreft Are you sure that you want to clear your clipboard history? Fjern all utklipstavlehistorikk? pvanek-qlipper-d7b29d0/ts/qlipper_nl.ts000066400000000000000000000370621516742713700202550ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 Binair: %1 Clipboard Klembord Selection Selectie Find Bufer Memòria intermèdia de Find Find Buffer Buffer zoeken Plain Text Platte tekst Rich Text Opgemaakte tekst Binary Content Binaire inhoud URL URL Sticky Item (Plain Text) Vast item (platte tekst) QlipperModel Welcome to the Qlipper clipboard history applet Welkom bij de Qlipper-klembordgeschiedenis QlipperPreferencesDialog Qlipper Preferences Qlipper-instellingen Preferences Instellingen Keyboard Shortcut: Sneltoets: Change global keyboard shortcut to invoke the menu on screen Pas de algemene sneltoets aan die het menu opent Clipboard Entries Count: Aantal klemborditems: The maximum count of dynamic items in the menu Het maximumaantal te tonen klemborditems in het menu entries items Maximum Display Size: Maximale weergavegrootte: How long is the preview text in the menu Hoe lang de voorvertoningstekst in het menu moet worden getoond characters tekens Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Gebruik klemborduitbreidingen (indien ondersteund) - (X11-selecties, OSX-zoekbuffer) Use Platform Specific Extensions (Advanced) Systeemuitbreidingen gebruiken (geavanceerd) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Nuttig voor het kopiëren van grote tekstvakken uit bijv. dummy-terminals (minicom, etc.) Trim Whitespaces for Every Line Witruimten op regeleinden verwijderen Tray icon image: Systeemvakpictogram: No synchronization of clipboard & PSE Klembord en uitbreidingen niet synchroniseren Synchronize clipboard & PSE when item selected Klembord en uitbreidingen synchroniseren na selecteren van item Synchronize clipboard & PSE instantly Klembord en uitbreidingen continu synchroniseren Clear Items on Exit Items wissen na afsluiten Synchronize history to storage instantly Geschiedenis continu synchroniseren naar opslag Confirm Clear History Geschiedenis wissen bevestigen Sticky Items Vaste items Sticky items are unchanged, always on top snippets in the menu Vaste items worden bovenaan het menu vastgemaakt en nooit gewijzigd Add new item to the end of the list Nieuwe items toevoegen aan einde van lijst &Add &Toevoegen Remove current item Huidig item verwijderen &Remove Ve&rwijderen Move item up Item omhoog verplaatsen &Up &Omhoog Move item down Item omlaag verplaatsen &Down O&mlaag Network Netwerk Send Content to Network Inhoud versturen via netwerk Receive Content from Network Inhoud ophalen van netwerk Port: Poort: Icon selection Pictogramkeuze Load icon from file... Kies een pictogrambestand… Use default icon Standaardpictogram gebruiken Select icon file Kies een pictogrambestand Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Afbeeldingen (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Kiezen Cancel Annuleren Look in: Label to describe the folder for icon file selection dialog. Zoeken in: Icon name: Pictogramnaam: Icon type: Soort pictogram: Add New Sticky Item Vast item toevoegen QlipperSystray C&lear clipboard history K&lembordgeschiedenis wissen &Configure... &Instellen… &About Qlipper... &Over Qlipper… &Quit &Afsluiten Qlipper - a clipboard history applet Qlipper - een klembordgeschiedeniswidget Yes Ja No Nee Yes (experimental) Ja (experimenteel) About Qlipper Over Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Lichte, platform-onafhankelijke klembordgeschiedeniswidget.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Ondersteuning voor algemene sneltoetsen: %1<br>Ondersteuning voor netwerkdeling: %2 Confirm Ja Are you sure that you want to clear your clipboard history? Weet u zeker dat u de klembordgeschiedenis wilt wissen? pvanek-qlipper-d7b29d0/ts/qlipper_oc.ts000066400000000000000000000355721516742713700202510ustar00rootroot00000000000000 QObject Url: %1 URL : %1 Binary: %1 Binari : %1 Clipboard Quichapapièrs Selection Seleccion Find Bufer Memòria intermèdia de Find Find Buffer Trobar una restanca Plain Text Tèxt brut Rich Text Tèxt enriquit Binary Content Contengut binari URL URL Sticky Item (Plain Text) Element permanent (tèxt brut) QlipperModel Welcome to the Qlipper clipboard history applet La benvenguda a l’applet d’istoric del quichapapièrs Qlipper QlipperPreferencesDialog Qlipper Preferences Preferéncias de Qlipper Preferences Preferéncias Keyboard Shortcut: Acorchis clavièr : Change global keyboard shortcut to invoke the menu on screen Modificar l’acorchi clavièr global per afichar lo menú a l’ecran Clipboard Entries Count: Nombre d’entradas al quichapapièrs : The maximum count of dynamic items in the menu Nombre maximal d’elements dinamics al menú entries entradas Maximum Display Size: Talha de l’afichatge maximal : How long is the preview text in the menu Longor maxima del tèxt d’apercebut al menú characters caractèrs Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Use Platform Specific Extensions (Advanced) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Trim Whitespaces for Every Line Tray icon image: No synchronization of clipboard & PSE Synchronize clipboard & PSE when item selected Synchronize clipboard & PSE instantly Clear Items on Exit Synchronize history to storage instantly Confirm Clear History Sticky Items Sticky items are unchanged, always on top snippets in the menu Add new item to the end of the list &Add &Apondre Remove current item Suprimir l’element actual &Remove Sup&rimir Move item up &Up Move item down &Down Network Ret Send Content to Network Enviar lo contengut a la ret Receive Content from Network Recebre lo contengut de la ret Port: Pòrt : Icon selection Seleccionar l’icòna Load icon from file... Use default icon Select icon file Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Cancel Anullar Look in: Label to describe the folder for icon file selection dialog. Icon name: Icon type: Add New Sticky Item QlipperSystray C&lear clipboard history &Configure... &Configurar... &About Qlipper... &A prepaus de Qlipper... &Quit &Quitar Qlipper - a clipboard history applet Qlipper - una applet d’istoric de quichapapièrs Yes Òc No Non Yes (experimental) Òc (experimental) About Qlipper A prepaus de Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Confirm Are you sure that you want to clear your clipboard history? pvanek-qlipper-d7b29d0/ts/qlipper_pl.ts000066400000000000000000000370341516742713700202560ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 Binaria: %1 Clipboard Schowek Selection Zaznaczenie Find Bufer Wyszukaj bufor Find Buffer Znajdź bufor Plain Text Czysty tekst Rich Text Tekst sformatowany Binary Content Zawartość binarna URL URL Sticky Item (Plain Text) Element przyklejony (czysty tekst) QlipperModel Welcome to the Qlipper clipboard history applet Witamy w aplecie historii schowka Qlipper QlipperPreferencesDialog Qlipper Preferences Ustawienia Qlipper Preferences Ustawienia Keyboard Shortcut: Skrót klawiszowy: Change global keyboard shortcut to invoke the menu on screen Zmień skrót klawiszowy wywołujący menu na ekran Clipboard Entries Count: Liczba elementów schowka: The maximum count of dynamic items in the menu Maksymalna liczba elementów w menu entries elementy(ów) Maximum Display Size: Maksymalny wyświetlany rozmiar: How long is the preview text in the menu Jak długi jest wyświetlany podgląd tekstu w menu characters znaki/ów Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Użyj rozszerzeń schowka (Zaznaczenia X11, Bufor wyszukiwania macOS), jeśli dostępne Use Platform Specific Extensions (Advanced) Używaj rozszerzeń dla określonej platformy (zaawansowane) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Przydatne przy kopiowaniu dużych tekstów (minicom, itp.) Trim Whitespaces for Every Line Usuwaj białe znaki w każdym wierszu Tray icon image: Ikona na panelu: No synchronization of clipboard & PSE Brak synchronizacji schowka i PSE Synchronize clipboard & PSE when item selected Synchronizuj schowek i PSE kiedy element zostanie zaznaczony Synchronize clipboard & PSE instantly Natychmiast synchronizuj schowek i PSE Clear Items on Exit Wyczyść przy wyjściu Synchronize history to storage instantly Natychmiast synchronizuj historię z pamięcią Confirm Clear History Potwierdź czyszczenie historii Sticky Items Elementy przyklejone Sticky items are unchanged, always on top snippets in the menu Elementy przyklejone nie są zmieniane, zostają zawsze na górze menu Add new item to the end of the list Dodaj nowy element na koniec listy &Add Dod&aj Remove current item Usuń obecny element &Remove &Usuń Move item up Przesuń element w górę &Up &W górę Move item down Przesuń element w dół &Down W &dół Network Sieć Send Content to Network Prześlij zawartość przez sieć Receive Content from Network Otrzymuj zawartość przez sieć Port: Port: Icon selection Wybór ikony Load icon from file... Wczytaj ikonę z pliku... Use default icon Użyj domyślnej ikony Select icon file Wybierz plik ikony Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Obrazy (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Wybierz ikonę Cancel Anuluj Look in: Label to describe the folder for icon file selection dialog. Szukaj w: Icon name: Nazwa ikony: Icon type: Typ ikony: Add New Sticky Item Dodaj nowy przyklejony element QlipperSystray C&lear clipboard history &Wyczyść historię schowka &Configure... &Konfiguruj... &About Qlipper... &O programie Qlipper... &Quit &Wyjdź Qlipper - a clipboard history applet Qlipper – aplet historii schowka Yes Tak No Nie Yes (experimental) Tak (eksperymentalne) About Qlipper O programie Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Lekki, wieloplatformowy aplet historii schowka systemowego.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p> Obsługa globalnego skrótu klawiszowego: %1<br> Możliwość udostępniana schowka w sieci: %2 Confirm Potwierdź Are you sure that you want to clear your clipboard history? Czy na pewno chcesz wyczyścić historię schowka? pvanek-qlipper-d7b29d0/ts/qlipper_pt.ts000066400000000000000000000373071516742713700202710ustar00rootroot00000000000000 QObject Url: %1 URL: %1 Binary: %1 Binário: %1 Clipboard Área de transferência Selection Seleção Find Bufer Localizar Buffer Plain Text Texto simples Rich Text Texto melhorado (RTF) Binary Content Conteúdo binário URL URL Sticky Item (Plain Text) Item fixo (texto simples) Find Buffer Localizar processador QlipperModel Welcome to the Qlipper clipboard history applet Bem-vindo a Qlipper QlipperPreferencesDialog Qlipper Preferences Preferências Preferences Preferências Keyboard Shortcut: Atalho de teclado: Change global keyboard shortcut to invoke the menu on screen Alterar o atalho de teclado para invocar o menu Clipboard Entries Count: Número de entradas na área de transferência: The maximum count of dynamic items in the menu Número máximo de itens dinâmicos no menu entries entradas Maximum Display Size: Tamanho máximo de exibição: How long is the preview text in the menu Comprimento do texto na pré-visualização characters caracteres Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Se possível, utilizar extensões da área de transferência (Seleções X11, OS X Find Buffer) Use Platform Specific Extensions (Advanced) Utilizar extensões específicas da plataforma (avançado) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Útil para blocos de texto maiores como, por exemplo, o texto de terminais fictícios (minicom, etc.) Trim Whitespaces for Every Line Remover espaços vazios das linhas Tray icon image: Imagem do ícone na bandeja: No synchronization of clipboard & PSE Não sincronizar área de transferência e PSE Synchronize clipboard & PSE when item selected Sincronizar área de transferência e PSE ao selecionar um item Synchronize clipboard & PSE instantly Sincronizar área de transferência e PSE imediatamente Clear Items on Exit Limpar itens ao sair Synchronize history to storage instantly Sincronizar histórico e armazenamento imediatamente Confirm Clear History Confirmação para limpeza Sticky Items Itens fixos Sticky items are unchanged, always on top snippets in the menu Os itens fixos permanecem inalterados, sempre no início do menu Add new item to the end of the list Adicionar novo item ao final da lista &Add &Adicionar Remove current item Remover item atual &Remove &Remover Move item up Mover para cima &Up S&ubir Move item down Mover para baixo &Down &Descer Network Rede Send Content to Network Enviar conteúdo para a rede Receive Content from Network Receber conteúdo pela rede Port: Porta: Icon selection Seleção de ícone Load icon from file... Carregar ícone de um ficheiro... Use default icon Utilizar ícone padrão Select icon file Selecionar ficheiro Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Imagens (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Selecionar ícone Cancel Cancelar Look in: Label to describe the folder for icon file selection dialog. Procurar em: Icon name: Nome do ícone: Icon type: Tipo do ícone: Add New Sticky Item Adicionar novo item fixo QlipperSystray C&lear clipboard history &Limpar histórico da área de transferência &Configure... &Configurar... &About Qlipper... &Acerca de Qlipper... &Quit &Sair Qlipper - a clipboard history applet Qlipper - um 'applet' para a área de transferência Yes Sim No Não Yes (experimental) Sim (experimental) About Qlipper Acerca de Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 'Applet' multiplataforma de histórico para a área de transferência .<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Suporte a atalhos de teclado: %1<br>Suporte a partilha da área de transferência através da rede: %2 Confirm Confirmar Are you sure that you want to clear your clipboard history? Tem a certeza de que deseja limpar o histórico da área de transferência? pvanek-qlipper-d7b29d0/ts/qlipper_ru.ts000066400000000000000000000426031516742713700202670ustar00rootroot00000000000000 QObject Url: %1 Ссылка: %1 Binary: %1 Данные: %1 Clipboard Буфер обмена Selection Выделение Find Bufer Memòria intermèdia de Find Find Buffer Буфер поиска Plain Text Простой текст Rich Text Текст с форматированием Binary Content Бинарные данные URL URL Sticky Item (Plain Text) Закреплённые (Простой текст) QlipperModel Welcome to the Qlipper clipboard history applet Добро пожаловать в Qlipper — апплет истории буфера обмена QlipperPreferencesDialog Qlipper Preferences Настройки Qlipper Preferences Настройки Keyboard Shortcut: Сочетание клавиш: Change global keyboard shortcut to invoke the menu on screen Изменить глобальное сочетание клавиш для открытия экранного меню Clipboard Entries Count: Размер истории буфера обмена: The maximum count of dynamic items in the menu Максимальное количество динамических записей из истории буфера обмена, отображаемых в меню entries зап. Maximum Display Size: Максимальный отображаемый размер: How long is the preview text in the menu Какой длинны должен быть текст, отображаемый в меню characters симв. Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Использовать расширения буфера обмена (Выделение X11, буфер поиска OS X), если они поддерживаются Use Platform Specific Extensions (Advanced) Использовать расширения платформы (для опытных) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Может быть полезно при копировании больших текстовых блоков с примитивных терминалов (minicom и т.п.) Trim Whitespaces for Every Line Обрезать пробелы на каждой строке Tray icon image: Значок в трее: No synchronization of clipboard & PSE Не синхронизировать обычный буфер обмена с расширенным Synchronize clipboard & PSE when item selected Синхронизировать обычный буфер обмена с расширенным при выборе записи Synchronize clipboard & PSE instantly Синхронизировать обычный буфер обмена с расширенным всегда Clear Items on Exit Очищать историю при выходе Synchronize history to storage instantly Синхронизировать историю с хранилищем постоянно Confirm Clear History Подтверждать очистку истории Sticky Items Закреплённые записи Sticky items are unchanged, always on top snippets in the menu Закреплённые записи — это неизменяемые куски текста, которые всегда будут находится под рукой Add new item to the end of the list Добавить новую запись в конец списка &Add &Добавить Remove current item Удалить выбранную запись &Remove &Удалить Move item up Переместить запись вверх &Up В&верх Move item down Переместить запись вниз &Down В&низ Network Сеть Send Content to Network Отправлять содержимое по сети Receive Content from Network Получать содержимое по сети Port: Порт: Icon selection Выбор значка Load icon from file... Загрузить значок из файла… Use default icon Использовать значок по умолчанию Select icon file Выберите файл со значком Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Изображения (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Выбрать значок Cancel Отмена Look in: Label to describe the folder for icon file selection dialog. Искать в: Icon name: Имя значка: Icon type: Тип значка: Add New Sticky Item Добавить новую закреплённую запись QlipperSystray C&lear clipboard history О&чистить историю буфера обмена &Configure... &Настроить… &About Qlipper... &О Qlipper… &Quit &Выход Qlipper - a clipboard history applet Qlipper — апплет истории буфера обмена Yes Да No Нет Yes (experimental) Да (экспериментально) About Qlipper О Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Легковесный кросс-платформенный апплет истории буфера обмена<p> (c)&nbsp;2010-2016&nbsp;Петр&nbsp;Ванек&nbsp;(Petr&nbsp;Vanek)&nbsp;&lt;petr@yarpen.cz&gt;<p> <a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p> Поддержка глобальных сочетаний клавиш: %1<br> Поддержка совместного использования буфера по сети: %1 Confirm Подтвердить Are you sure that you want to clear your clipboard history? Вы уверены, что хотите очистить историю буфера обмена? pvanek-qlipper-d7b29d0/ts/qlipper_si.ts000066400000000000000000000353711516742713700202600ustar00rootroot00000000000000 QObject Url: %1 Binary: %1 Clipboard Selection Find Bufer Memòria intermèdia de Find Find Buffer Plain Text Rich Text Binary Content URL Sticky Item (Plain Text) QlipperModel Welcome to the Qlipper clipboard history applet QlipperPreferencesDialog Qlipper Preferences Preferences Keyboard Shortcut: Change global keyboard shortcut to invoke the menu on screen Clipboard Entries Count: The maximum count of dynamic items in the menu entries Maximum Display Size: How long is the preview text in the menu characters Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Use Platform Specific Extensions (Advanced) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Trim Whitespaces for Every Line Tray icon image: No synchronization of clipboard & PSE Synchronize clipboard & PSE when item selected Synchronize clipboard & PSE instantly Clear Items on Exit Synchronize history to storage instantly Confirm Clear History Sticky Items Sticky items are unchanged, always on top snippets in the menu Add new item to the end of the list &Add Remove current item &Remove Move item up &Up Move item down &Down Network Send Content to Network Receive Content from Network Port: Icon selection Load icon from file... Use default icon Select icon file Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Cancel Look in: Label to describe the folder for icon file selection dialog. Icon name: Icon type: Add New Sticky Item QlipperSystray C&lear clipboard history &Configure... &About Qlipper... &Quit Qlipper - a clipboard history applet Yes No Yes (experimental) About Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Confirm Are you sure that you want to clear your clipboard history? pvanek-qlipper-d7b29d0/ts/qlipper_sk.ts000066400000000000000000000372421516742713700202610ustar00rootroot00000000000000 QObject Url: %1 Url: %1 Binary: %1 Binárny súbor: %1 Clipboard Schránka Selection Výber Find Bufer Memòria intermèdia de Find Find Buffer Buffer hľadania Plain Text Prostý text Rich Text Formátovaný text Binary Content Binárny obsah URL URL Sticky Item (Plain Text) Trvalá položka (prostý text) QlipperModel Welcome to the Qlipper clipboard history applet Víta vás Qlipper, správca systémovej schránky QlipperPreferencesDialog Qlipper Preferences Nastavenia Qlipperu Preferences Nastavenia Keyboard Shortcut: Klávesová skratka: Change global keyboard shortcut to invoke the menu on screen Zmeniť globálnu klávesovú skratku na otvorenie ponuky Clipboard Entries Count: Počet položiek v schránke: The maximum count of dynamic items in the menu Maximálny počet dynamických položiek v ponuke entries položiek Maximum Display Size: Maximálna veľkosť zobrazenia: How long is the preview text in the menu Počet znakov náhľadu v ponuke characters znakov Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Použiť doplnky schránky (X11 Selections, OS X Find Buffer) v prípade, že sú podporované Use Platform Specific Extensions (Advanced) Použiť rozšírenia závislé od systému Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Zjednoduší čítanie väčších blokov textu skopírovaných napr. z terminálu (minicom, atď.) Trim Whitespaces for Every Line Odstrániť prázdne znaky v každom riadku Tray icon image: Obrázok ikony na paneli: No synchronization of clipboard & PSE Nesynchronizovať schránku s rozšíreniami Synchronize clipboard & PSE when item selected Synchronizovať schránku s doplnkami pri výbere položky Synchronize clipboard & PSE instantly Synchronizovať schránku s doplnkami okamžite Clear Items on Exit Vymazať položky pri skončení Synchronize history to storage instantly Okamžite synchronizovať históriu s úložiskom Confirm Clear History Potvrdiť vymazanie histórie Sticky Items Trvalé položky Sticky items are unchanged, always on top snippets in the menu Trvalé položky ostávajú nezmenené a stále sa nachádzajú na vrchu ponuky Add new item to the end of the list Pridať novú položku na koniec zoznamu &Add &Pridať Remove current item Odstrániť vybranú položku &Remove &Odstrániť Move item up Posunúť vyššie &Up &Vyššie Move item down Posunúť položku nižšie &Down &Nižšie Network Sieť Send Content to Network Odoslať obsah po sieti Receive Content from Network Prijať obsah zo siete Port: Port: Icon selection Výber ikony Load icon from file... Načítať ikonu zo súboru... Use default icon Použiť predvolenú ikonu Select icon file Vybrať súbor s ikonou Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Obrázky (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Vybrať ikonu Cancel Zrušiť Look in: Label to describe the folder for icon file selection dialog. Priečinok: Icon name: Názov ikony: Icon type: Typ ikony: Add New Sticky Item Pridať novú trvalú položku QlipperSystray C&lear clipboard history &Vymazať históriu schránky &Configure... &Nastavenia... &About Qlipper... &O programe... &Quit &Ukončiť Qlipper - a clipboard history applet Qlipper - správca histórie schránky Yes Áno No Nie Yes (experimental) Áno (experimentálne) About Qlipper O programe Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Rýchly a jednoduchý viacsystémový program na prácu s históriou schránky<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Podpora pre globálne klávesové skratky: %1<br>Podpora pre zdieľanie schránky cez sieť: %2 Confirm Potvrdiť Are you sure that you want to clear your clipboard history? Ste si istý, že chcete vymazať históriu schránky? pvanek-qlipper-d7b29d0/ts/qlipper_sr.ts000066400000000000000000000405441516742713700202670ustar00rootroot00000000000000 QObject Url: %1 Url: %1 Binary: %1 Бинарно: %1 Clipboard Клипборд Selection Одабир Find Bufer Пронађи међуспремник Find Buffer Plain Text Обичан текст Rich Text Binary Content Бинарни садржај URL URL Sticky Item (Plain Text) Лепљиви предмет (Обичан текст) QlipperModel Welcome to the Qlipper clipboard history applet Добродошли у Кјулипер, алатку за историјат клипборда QlipperPreferencesDialog Qlipper Preferences Подешавања Кјулипера Preferences Подешавања Keyboard Shortcut: Пречица тастатуре: Change global keyboard shortcut to invoke the menu on screen Промени глобалну пречицу за позивање менија на екрану Clipboard Entries Count: Број уноса клипборда: The maximum count of dynamic items in the menu Максималан број промењивих уноса на менију entries уноса Maximum Display Size: Максимална величина приказа: How long is the preview text in the menu Колико дуг је преглед текста на менију characters знакова Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Користи проширења клипборда (Икс11 Одабири, ОС Икс Претрага Бафера) ако су подржана Use Platform Specific Extensions (Advanced) Користи проширења специфична за платформе (напредно) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Корисно за веће блокове текста копиране са на пример лажних терминала (minicom, итд.) Trim Whitespaces for Every Line Уклони празан простор за сваку линију Tray icon image: Слика иконе у траци: No synchronization of clipboard & PSE Нема синхронизације клипборда и PSE Synchronize clipboard & PSE when item selected Синхронизуј клипборд и PSE када је предмет изабран Synchronize clipboard & PSE instantly Синхронизуј клипборд и PSE одмах Clear Items on Exit Обриши предмет на излазу Synchronize history to storage instantly Синхрониизуј историју са складиштем одмах Confirm Clear History Потврди брисање историје Sticky Items Лепљиве ставке Sticky items are unchanged, always on top snippets in the menu Лепљиве ставке се не мењају, увек су на врху у менију Add new item to the end of the list Додај нову ставку на крај списка &Add &Додај Remove current item Уклони тренутну ставку &Remove &Обнови Move item up Помери ставку горе &Up &Горе Move item down Помери ставку доле &Down До&ле Network Мрежа Send Content to Network Пошаљи садржај на мрежу Receive Content from Network Прими садржај са мреже Port: Порт: Icon selection Селекција иконе Load icon from file... Учитај икону из фајла... Use default icon Користи подразумевану икону Select icon file Изабери икону фајла Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Слике (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Изабери икону Cancel Прекини Look in: Label to describe the folder for icon file selection dialog. Претражи у: Icon name: Име иконе: Icon type: Add New Sticky Item Додај нови лепљиви унос QlipperSystray C&lear clipboard history Очисти &историјат &Configure... &Подеси... &About Qlipper... &О програму... &Quit &Напусти Qlipper - a clipboard history applet Кјулипер - алатка за историјат клипборда Yes Да No Не Yes (experimental) Да (експериментално) About Qlipper О Кјулиперу Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Confirm Потврди Are you sure that you want to clear your clipboard history? Да ли си сигуран да желиш обрисати клипборд историју? pvanek-qlipper-d7b29d0/ts/qlipper_sv.ts000066400000000000000000000365221516742713700202740ustar00rootroot00000000000000 QObject Url: %1 Url: %1 Binary: %1 Binärt: %1 Clipboard Urklipp Selection Urval Find Bufer Hitta buffer Find Buffer Hitta Buffer Plain Text Oformatterad text Rich Text Formatterad text Binary Content Binärt innehåll URL URL Sticky Item (Plain Text) Låst text (Oformatterad) QlipperModel Welcome to the Qlipper clipboard history applet Välkommen till Qlipper, en app för urklippshistoria QlipperPreferencesDialog Qlipper Preferences Qlippers inställningar Preferences Inställningar Keyboard Shortcut: Snabbtangent: Change global keyboard shortcut to invoke the menu on screen Ändra snabbtangentval för att visa menyn på skärmen Clipboard Entries Count: Antal rader i urklipp: The maximum count of dynamic items in the menu Maximalt antal dynamiska rader i menyn entries rader Maximum Display Size: Max storlek: How long is the preview text in the menu Hur lång är förvisningstexten i menyn characters tecken Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Använd utökat urklipp när det finns (Urval för X11, OS X Hitta Buffer) Use Platform Specific Extensions (Advanced) Använd specifika utökningar (avancerat) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Bra till större textblock från exvis terminal (minicom etc) Trim Whitespaces for Every Line Ta bort inledande/avslutande blanka Tray icon image: Statusradens ikon: No synchronization of clipboard & PSE Synkronisera inte urklippet & PSE Synchronize clipboard & PSE when item selected Synkronisera urklippet & PSE vid val av rad Synchronize clipboard & PSE instantly Synkronisera urklippet & PSE omedelbart Clear Items on Exit Rensa listan vid stängning Synchronize history to storage instantly Synkronisera historiken till lagringen genast Confirm Clear History Bekräfta radering av historik Sticky Items Låsta urklipp Sticky items are unchanged, always on top snippets in the menu Låsta urklipp är alltid på topp i menyn Add new item to the end of the list Lägg till nytt i slutet på listan &Add &Lägg till Remove current item Ta bort aktuellt urklipp &Remove &Ta bort Move item up Flytta upp &Up &Upp Move item down Flytta ner &Down &Ner Network Nätverk Send Content to Network Skicka till nätverket Receive Content from Network Ta emot från nätverket Port: Port: Icon selection Vald ikon Load icon from file... Hämta ikon från fil... Use default icon Använd standardikon Select icon file Välj ikonfil Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Bilder (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Välj ikon Cancel Avbryt Look in: Label to describe the folder for icon file selection dialog. Leta i: Icon name: Namn på ikon: Icon type: Typ av ikon: Add New Sticky Item Lägg till nytt låst urklipp QlipperSystray C&lear clipboard history &Töm urklippshistorik &Configure... &Inställningar... &About Qlipper... &Om Qlipper... &Quit &Avsluta Qlipper - a clipboard history applet Qlipper - en app för urklippshistorik Yes Ja No Nej Yes (experimental) Ja (experimentellt) About Qlipper Om Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Lättviktig app för urklippshistorik.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Confirm Bekräfta Are you sure that you want to clear your clipboard history? Är du säker på att du vill radera din kopieringshistoria? pvanek-qlipper-d7b29d0/ts/qlipper_uk.ts000066400000000000000000000424541516742713700202640ustar00rootroot00000000000000 QObject Url: %1 Url-адреса: %1 Binary: %1 Двійкові: %1 Clipboard Буфер обміну Selection Вибір Find Bufer Memòria intermèdia de Find Find Buffer Буфер пошуку Plain Text Звичайний текст Rich Text Форматований текст Binary Content Двійкові дані URL URL-адреса Sticky Item (Plain Text) Закріплені елементи (Звичайний текст) QlipperModel Welcome to the Qlipper clipboard history applet Вітаємо у аплеті історії буфера обміну Qlipper QlipperPreferencesDialog Qlipper Preferences Налаштування Qlipper Preferences Налаштування Keyboard Shortcut: Комбінації клавіш: Change global keyboard shortcut to invoke the menu on screen Змінити системні комбінації клавіш, щоб викликати меню на екрані Clipboard Entries Count: Кількість записів у буфері обміну: The maximum count of dynamic items in the menu Максимальна кількість динамічних елементів показаних у меню entries записи Maximum Display Size: Максимальний показуваний розмір: How long is the preview text in the menu Довжина показуваного тексту в меню characters символів Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported Використовувати розширення буфера обміну (Виділення X11, буфер пошуку OS X), якщо воно підтримується Use Platform Specific Extensions (Advanced) Використовувати системні розширення платформи (додатково) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) Корисно для великих текстових блоків, скопійованих, наприклад, зі спрощених терміналів (minicom тощо) Trim Whitespaces for Every Line Обрізати пробіли у кожному рядку Tray icon image: Зображення піктограми у системному лотку: No synchronization of clipboard & PSE Не синхронізувати буфер обміну та розширення Synchronize clipboard & PSE when item selected Синхронізувати буфер обміну та розширення, якщо вибрано елемент Synchronize clipboard & PSE instantly Завжди синхронізувати буфер обміну та розширення Clear Items on Exit Очищувати історію під час виходу Synchronize history to storage instantly Завжди синхронізувати історію зі сховищем Confirm Clear History Підтверджувати очищення історії Sticky Items Прикріплені елементи Sticky items are unchanged, always on top snippets in the menu Прикріплені елементи — закріплені вгорі меню фрагменти, які не змінюють розташування Add new item to the end of the list Додати новий елемент у кінець списку &Add &Додати Remove current item Вилучити вибраний елемент &Remove &Вилучити Move item up Пересунути елемент вище &Up В&гору Move item down Пересунути елемент нижче &Down В&низ Network Мережа Send Content to Network Надсилати вміст мережею Receive Content from Network Отримувати вміст із мережі Port: Порт: Icon selection Вибір піктограми Load icon from file... Завантажити піктограму з файлу... Use default icon Використовувати типову піктограму Select icon file Вибрати файл піктограми Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Зображення (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon Вибрати піктограму Cancel Скасувати Look in: Label to describe the folder for icon file selection dialog. Шукати в: Icon name: Назва піктограми: Icon type: Тип піктограми: Add New Sticky Item Прикріпити новий елемент QlipperSystray C&lear clipboard history &Очистити історію буфера обміну &Configure... &Налаштувати... &About Qlipper... &Про Qlipper... &Quit &Вийти Qlipper - a clipboard history applet Qlipper — аплет історії буфера обміну Yes Так No Ні Yes (experimental) Так (експериментально) About Qlipper Про Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 Легкий, багатоплатформовий аплет історії буфера обміну.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Підтримка системних комбінацій клавіш: %1<br>Підтримка мережевого буфера обміну: %2 Confirm Підтвердити Are you sure that you want to clear your clipboard history? Ви впевнені, що хочете очистити історію буфера обміну? pvanek-qlipper-d7b29d0/ts/qlipper_zh_CN.ts000066400000000000000000000371621516742713700206460ustar00rootroot00000000000000 QObject Url: %1 Shouldn't this be capitalized in English, too? 网址: %1 Binary: %1 数据: %1 Clipboard 剪贴板 Selection 选区 Find Bufer Should be "Buffer" in English. 查找缓冲区 Find Buffer 查找缓冲区 Plain Text 纯文本 Rich Text 富文本 Binary Content 数据内容 URL 网址 Sticky Item (Plain Text) 固定条目 (纯文本) QlipperModel Welcome to the Qlipper clipboard history applet Translation is cropped, but full text doesn't get displayed in the list most of the time anyway. 欢迎使用 Qlipper QlipperPreferencesDialog Qlipper Preferences Qlipper 首选项 Preferences 首选项 Keyboard Shortcut: 键盘快捷键: Change global keyboard shortcut to invoke the menu on screen 更改全局快捷键以在屏幕上调用菜单 Clipboard Entries Count: 剪贴板条目数量: The maximum count of dynamic items in the menu 菜单中动态条目的最大数量 entries 条目 Maximum Display Size: 最大显示字符数目: How long is the preview text in the menu 菜单中预览文本的长度 characters 字符 Tray icon image: 托盘图标图像: Use clipboard extensions (X11 Selections, OS X Find Buffer) when it's supported 当支持时, 使用剪贴板扩展 (X11 的选区, OS X 的查找缓冲区) Use Platform Specific Extensions (Advanced) 使用平台相关扩展 (高级) Useful for bigger text blocks copied for example from dummy terminals (minicom, etc.) 适用于较大文本块, 如从虚拟终端 (如 minicom 等) 中复制文本时 Trim Whitespaces for Every Line 修整每行中的首尾空格 No synchronization of clipboard & PSE 不要同步剪贴板和 PSE Synchronize clipboard & PSE when item selected 当项目被选中时同步剪贴板和 PSE Synchronize clipboard & PSE instantly 立即同步剪贴板和 PSE Clear Items on Exit 退出时清除条目 Synchronize history to storage instantly 将历史记录立即同步到存储 Confirm Clear History 确认清除历史记录 Sticky Items 固定条目 Sticky items are unchanged, always on top snippets in the menu 固定条目固定不变, 并一直显示于菜单的最上方 Add new item to the end of the list 添加新条目至列表底部 &Add 添加 (&A) Remove current item 移除当前条目 &Remove 移除 (&R) Move item up 向上移动条目 &Up 上移 (&U) Move item down 向下移动条目 &Down 下移 (&D) Network 网络 Send Content to Network 将内容发送到网络 Receive Content from Network 从网络接收内容 Port: 端口: Icon selection 图标选择 Load icon from file... 从文件加载图标... Use default icon 使用默认图标 Select icon file 选择图标文件 Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga) 图像 (*.bmp *.jpg *.jpeg *.png *.svg *.tga) Select icon 选择图标 Cancel 取消 Look in: Label to describe the folder for icon file selection dialog. 浏览: Icon name: 图标名称: Icon type: 图标类型: Add New Sticky Item 添加新固定条目 QlipperSystray C&lear clipboard history 清除剪贴板历史记录 (&L) &Configure... 配置 (&C) ... &About Qlipper... 关于 Qlipper (&A) ... &Quit 退出 (&Q) Qlipper - a clipboard history applet Qlipper - 一个剪贴板历史记录小程序 Yes No Yes (experimental) 是 (实验性) About Qlipper 关于 Qlipper Lightweight, cross-platform clipboard history applet.<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>Support for global keyboard shortcut: %1<br>Support for network clipboard sharing: %2 轻量级跨平台剪贴板历史记录小程序<p>(c)&nbsp;2010-2016&nbsp;Petr&nbsp;Vanek&nbsp;&lt;petr@yarpen.cz&gt;<p><a href="https://github.com/pvanek/qlipper/">https://github.com/pvanek/qlipper/</a><p>全局快捷键支持: %1<br>网络剪贴板共享支持: %2 Confirm 确定 Are you sure that you want to clear your clipboard history? 您确定要清除剪贴板历史记录吗?