diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index abfb960..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,124 +0,0 @@ - -project(breeze10) -set(PROJECT_VERSION "0.1") -set(PROJECT_VERSION_MAJOR 0) - -cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) - -include(WriteBasicConfigVersionFile) -include(FeatureSummary) - -find_package(ECM 0.0.9 REQUIRED NO_MODULE) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules") - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_SOURCE_DIR}/cmake) - -include(ECMInstallIcons) -include(KDEInstallDirs) -include(KDECMakeSettings) -include(KDECompilerSettings NO_POLICY_SCOPE) -include(GenerateExportHeader) -# include(GtkUpdateIconCache) - -find_package(KDecoration2 REQUIRED) - - -# old stuff -add_definitions(-DTRANSLATION_DOMAIN="breeze_kwin_deco") - -find_package(KF5 REQUIRED COMPONENTS CoreAddons GuiAddons ConfigWidgets WindowSystem I18n) -find_package(Qt5 CONFIG REQUIRED COMPONENTS DBus) - -### XCB -find_package(XCB COMPONENTS XCB) -set_package_properties(XCB PROPERTIES - DESCRIPTION "X protocol C-language Binding" - URL "http://xcb.freedesktop.org" - TYPE OPTIONAL - PURPOSE "Required to pass style properties to native Windows on X11 Platform" -) - -if(UNIX AND NOT APPLE) - - set(BREEZE_HAVE_X11 ${XCB_XCB_FOUND}) - if (XCB_XCB_FOUND) - find_package(Qt5 REQUIRED CONFIG COMPONENTS X11Extras) - endif() - -else() - - set(BREEZE_HAVE_X11 FALSE) - -endif() - -################# configuration ################# -configure_file(config-breeze.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-breeze.h ) - -################# includes ################# -add_subdirectory(libbreezecommon) - -################# newt target ################# -### plugin classes -set(breeze10_SRCS - breezebutton.cpp - breezedecoration.cpp - breezeexceptionlist.cpp - breezesettingsprovider.cpp - breezesizegrip.cpp) - -kconfig_add_kcfg_files(breeze10_SRCS breezesettings.kcfgc) - -### config classes -### they are kept separately because they might move in a separate library in the future -set(breeze10_config_SRCS - config/breezeconfigwidget.cpp - config/breezedetectwidget.cpp - config/breezeexceptiondialog.cpp - config/breezeexceptionlistwidget.cpp - config/breezeexceptionmodel.cpp - config/breezeitemmodel.cpp -) - -set(breeze10_config_PART_FORMS - config/ui/breezeconfigurationui.ui - config/ui/breezedetectwidget.ui - config/ui/breezeexceptiondialog.ui - config/ui/breezeexceptionlistwidget.ui -) - -ki18n_wrap_ui(breeze10_config_PART_FORMS_HEADERS ${breeze10_config_PART_FORMS}) - -### build library -add_library(breeze10 MODULE - ${breeze10_SRCS} - ${breeze10_config_SRCS} - ${breeze10_config_PART_FORMS_HEADERS}) - -target_link_libraries(breeze10 - PUBLIC - Qt5::Core - Qt5::Gui - Qt5::DBus - PRIVATE - breeze10common5 - KDecoration2::KDecoration - KF5::ConfigCore - KF5::CoreAddons - KF5::ConfigWidgets - KF5::GuiAddons - KF5::I18n - KF5::WindowSystem) - -if(BREEZE_HAVE_X11) - target_link_libraries(breeze10 - PUBLIC - Qt5::X11Extras - XCB::XCB) -endif() - - -install(TARGETS breeze10 DESTINATION ${PLUGIN_INSTALL_DIR}/org.kde.kdecoration2) -install(FILES config/breeze10config.desktop DESTINATION ${SERVICES_INSTALL_DIR}) -# install(TARGETS breezedecoration DESTINATION ${PLUGIN_INSTALL_DIR}/org.kde.kdecoration2) -# install(FILES config/breezedecorationconfig.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index a151f40..0000000 --- a/ChangeLog +++ /dev/null @@ -1,3 +0,0 @@ -V5.16 ---------- - * Initial release. diff --git a/LICENSE b/LICENSE index 94a9ed0..204b93d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,19 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. 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 -them 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 prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. 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. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey 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; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If 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 convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU 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 that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - 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. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -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. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +MIT License Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Messages.sh b/Messages.sh deleted file mode 100644 index 4f38b6d..0000000 --- a/Messages.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!bin/sh -$EXTRACTRC `find . -name \*.rc -o -name \*.ui -o -name \*.kcfg` >> rc.cpp -$XGETTEXT `find . -name \*.cc -o -name \*.cpp -o -name \*.h` -o $podir/breeze_kwin_deco.pot -rm -f rc.cpp diff --git a/NEWS b/NEWS deleted file mode 100644 index 538716c..0000000 --- a/NEWS +++ /dev/null @@ -1,5 +0,0 @@ -Latest version: - - 18 Jun 2019, V5.16 - -See "ChangeLog" for changes. diff --git a/README.md b/README.md index b0d9612..e2aa80d 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,3 @@ # Bogir-decorations -## Overview - -Bogir-decoration is a fork of the Breeze10 KDE window decoration meant for the Bogir theme. - -## Credits - -Breeze10: https://github.com/fauzie811/Breeze10 (see credits section for all relevant credits.) - -## Dependencies - -There are some dependencies you'll need to install to compile. Some people suggested using the following commands: - -### Ubuntu or Debian based distros: -```bash -sudo apt install git g++ extra-cmake-modules cmake gettext libkf5config-dev libkdecorations2-dev libqt5x11extras5-dev qtdeclarative5-dev libkf5guiaddons-dev libkf5configwidgets-dev libkf5windowsystem-dev libkf5coreaddons-dev libfftw3-dev -``` - -### Arch based distros (including manjaro): -```bash -sudo pacman -S kdecoration qt5-declarative qt5-x11extras kcoreaddons kguiaddons kconfigwidgets kwindowsystem fftw cmake extra-cmake-modules -``` - -### OpenSUSE -``` bash -sudo zypper install git extra-cmake-modules libkdecoration2-devel kcoreaddons-devel kguiaddons-devel kconfig-devel kwindowsystem-devel ki18n-devel kconfigwidgets-devel libQt5DBus-devel libqt5-qtx11extras-devel fftw3-devel -``` - -## Installation - -Once you have the dependencies listed above, to build manually, open a terminal inside the source directory and do: -```bash -mkdir build && cd build -cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DKDE_INSTALL_LIBDIR=lib -DBUILD_TESTING=OFF -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -make -sudo make install -``` -Alternatively, run `./install.sh` for an automated build process. -After the intallation, restart KWin by logging out and in (or run `kwin_x11 --replace` from KRunner(open with Alt+Space), or `kwin_wayland --replace` if Wayland (untested!) is in use). Then, Bogir will appear in *System Settings → Application Style → Window Decorations*. - - +The window decorations for the bogir theme \ No newline at end of file diff --git a/breeze.h b/breeze.h deleted file mode 100644 index acada22..0000000 --- a/breeze.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef breeze_h -#define breeze_h - -/* - * Copyright 2014 Hugo Pereira Da Costa - * - * 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 (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * 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 . - */ - -#include "breezesettings.h" - -#include -#include - -namespace Breeze -{ - //* convenience typedefs - using InternalSettingsPtr = QSharedPointer; - using InternalSettingsList = QList; - using InternalSettingsListIterator = QListIterator; - - //* metrics - enum Metrics - { - - // shadow dimensions (pixels) - Shadow_Overlap = 3, - - }; - - //* exception - enum ExceptionMask - { - None = 0, - BorderSize = 1<<4 - }; -} - -#endif diff --git a/breeze.json b/breeze.json deleted file mode 100644 index 9aef59a..0000000 --- a/breeze.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "KPlugin": { - "Description": "A fork of Breeze10 decorations for KDE-meant to be used with the Bogir theme", - "EnabledByDefault": true, - "Id": "com.gitdab.codic.Bogir", - "Name": "Bogir", - "ServiceTypes": [ - "org.kde.kdecoration2" - ] - }, - "org.kde.kdecoration2": { - "blur": true, - "defaultTheme": "Bogir", - "kcmodule": true - } -} diff --git a/breezebutton.cpp b/breezebutton.cpp deleted file mode 100644 index c182a86..0000000 --- a/breezebutton.cpp +++ /dev/null @@ -1,531 +0,0 @@ -/* - * Copyright 2014 Martin Gräßlin - * Copyright 2014 Hugo Pereira Da Costa - * - * 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 (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * 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 . - */ -#include "breezebutton.h" - -#include -#include - -#include - -namespace Breeze -{ - - using KDecoration2::ColorRole; - using KDecoration2::ColorGroup; - using KDecoration2::DecorationButtonType; - - - //__________________________________________________________________ - Button::Button(DecorationButtonType type, Decoration* decoration, QObject* parent) - : DecorationButton(type, decoration, parent) - , m_animation( new QPropertyAnimation( this ) ) - { - - // setup animation - m_animation->setStartValue( 0 ); - m_animation->setEndValue( 1.0 ); - m_animation->setTargetObject( this ); - m_animation->setPropertyName( "opacity" ); - m_animation->setEasingCurve( QEasingCurve::InOutQuad ); - - // setup default geometry - const int height = decoration->buttonHeight(); - const int width = height * (type == DecorationButtonType::Menu ? 1.0 : 1.5); - setGeometry(QRect(0, 0, width, height)); - setIconSize(QSize( width, height )); - - // connections - connect(decoration->client().data(), SIGNAL(iconChanged(QIcon)), this, SLOT(update())); - connect(decoration->settings().data(), &KDecoration2::DecorationSettings::reconfigured, this, &Button::reconfigure); - connect( this, &KDecoration2::DecorationButton::hoveredChanged, this, &Button::updateAnimationState ); - - reconfigure(); - - } - - //__________________________________________________________________ - Button::Button(QObject *parent, const QVariantList &args) - : Button(args.at(0).value(), args.at(1).value(), parent) - { - m_flag = FlagStandalone; - //! icon size must return to !valid because it was altered from the default constructor, - //! in Standalone mode the button is not using the decoration metrics but its geometry - m_iconSize = QSize(-1, -1); - } - - //__________________________________________________________________ - Button *Button::create(DecorationButtonType type, KDecoration2::Decoration *decoration, QObject *parent) - { - if (auto d = qobject_cast(decoration)) - { - Button *b = new Button(type, d, parent); - switch( type ) - { - - case DecorationButtonType::Close: - b->setVisible( d->client().data()->isCloseable() ); - QObject::connect(d->client().data(), &KDecoration2::DecoratedClient::closeableChanged, b, &Breeze::Button::setVisible ); - break; - - case DecorationButtonType::Maximize: - b->setVisible( d->client().data()->isMaximizeable() ); - QObject::connect(d->client().data(), &KDecoration2::DecoratedClient::maximizeableChanged, b, &Breeze::Button::setVisible ); - break; - - case DecorationButtonType::Minimize: - b->setVisible( d->client().data()->isMinimizeable() ); - QObject::connect(d->client().data(), &KDecoration2::DecoratedClient::minimizeableChanged, b, &Breeze::Button::setVisible ); - break; - - case DecorationButtonType::ContextHelp: - b->setVisible( d->client().data()->providesContextHelp() ); - QObject::connect(d->client().data(), &KDecoration2::DecoratedClient::providesContextHelpChanged, b, &Breeze::Button::setVisible ); - break; - - case DecorationButtonType::Shade: - b->setVisible( d->client().data()->isShadeable() ); - QObject::connect(d->client().data(), &KDecoration2::DecoratedClient::shadeableChanged, b, &Breeze::Button::setVisible ); - break; - - case DecorationButtonType::Menu: - QObject::connect(d->client().data(), &KDecoration2::DecoratedClient::iconChanged, b, [b]() { b->update(); }); - break; - - default: break; - - } - - return b; - } - - return nullptr; - - } - - //__________________________________________________________________ - void Button::paint(QPainter *painter, const QRect &repaintRegion) - { - Q_UNUSED(repaintRegion) - - if (!decoration()) return; - - painter->save(); - - // translate from offset - if( m_flag == FlagFirstInList ) painter->translate( m_offset ); - else painter->translate( 0, m_offset.y() ); - - if( !m_iconSize.isValid() ) m_iconSize = geometry().size().toSize(); - - // menu button - if (type() == DecorationButtonType::Menu) - { - - // const QRectF iconRect( geometry().topLeft(), m_iconSize ); - const int menuIconSize = (qobject_cast(decoration()))->iconSize(); - const qreal topLeft = (geometry().width()/2) - (menuIconSize/2); - - const QRectF iconRect(topLeft + geometry().left(), topLeft + geometry().top(), menuIconSize, menuIconSize); - decoration()->client().data()->icon().paint(painter, iconRect.toRect()); - - } else { - - drawIcon( painter ); - - } - - painter->restore(); - - } - - //__________________________________________________________________ - void Button::drawIcon( QPainter *painter ) const - { - - painter->setRenderHints( QPainter::Antialiasing ); - - /* - scale painter so that its window matches QRect( 0, 0, 45, 30 ) - this makes all further rendering and scaling simpler - all further rendering is preformed inside QRect( 0, 0, 45, 30 ) - */ - painter->translate( geometry().topLeft() ); - - const qreal height( m_iconSize.height() ); - const qreal width( m_iconSize.width() ); - if ( height != 30 ) - painter->scale( width/45, height/30 ); - - // render background - const QColor backgroundColor( this->backgroundColor() ); - - auto d = qobject_cast( decoration() ); - bool isInactive(d && !d->client().data()->isActive() - && !isHovered() && !isPressed() - && m_animation->state() != QPropertyAnimation::Running); - QColor inactiveCol(Qt::gray); - if (isInactive) - { - int gray = qGray(d->titleBarColor().rgb()); - if (gray <= 200) { - gray += 55; - gray = qMax(gray, 115); - } - else gray -= 45; - inactiveCol = QColor(gray, gray, gray); - } - - // render mark - const QColor foregroundColor( this->foregroundColor() ); - if( foregroundColor.isValid() ) - { - - // setup painter - QPen pen( foregroundColor ); - pen.setCapStyle( Qt::FlatCap ); - pen.setJoinStyle( Qt::MiterJoin ); - // pen.setWidthF( 1.0*qMax((qreal)1.0, 30/width ) ); - pen.setWidthF( 1.0 ); - - switch( type() ) - { - - case DecorationButtonType::Close: - { - if( backgroundColor.isValid() ) - { - painter->setPen( Qt::NoPen ); - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - pen.setWidthF( 1.1 ); - painter->setPen( pen ); - painter->setBrush( Qt::NoBrush ); - - painter->drawLine( QPointF( 18, 10 ), QPointF( 28, 20 ) ); - painter->drawLine( QPointF( 18, 20 ), QPointF( 28, 10 ) ); - pen.setWidthF( 1.0 ); - break; - } - - case DecorationButtonType::Maximize: - { - if( backgroundColor.isValid() ) - { - painter->setPen( Qt::NoPen ); - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - - painter->setPen( pen ); - painter->setBrush( Qt::NoBrush ); - - if (isChecked()) - { - painter->drawRect(QRectF(18.5, 12.5, 7.0, 7.0)); - painter->drawPolyline(QPolygonF() - << QPointF(20.5, 12.5) << QPointF(20.5, 10.5) << QPointF(27.5, 10.5) << QPointF(27.5, 17.5) << QPointF(25.5, 17.5)); - } - else { - painter->drawRect(QRectF(18.5, 10.5, 9.0, 9.0)); - } - - break; - } - - case DecorationButtonType::Minimize: - { - if( backgroundColor.isValid() ) - { - painter->setPen( Qt::NoPen ); - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - - painter->setPen( pen ); - painter->setBrush( Qt::NoBrush ); - - painter->drawLine( QPointF( 18, 15.5 ), QPointF( 28, 15.5 ) ); - - break; - } - - case DecorationButtonType::OnAllDesktops: - { - painter->setPen( Qt::NoPen ); - if( backgroundColor.isValid() ) - { - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - painter->setBrush( foregroundColor ); - - if( isChecked()) { - - // outer ring - painter->drawRect( QRectF( 16, 9, 12, 12 ) ); - - // center dot - QColor backgroundColor( this->backgroundColor() ); - if( !backgroundColor.isValid() && d ) backgroundColor = d->titleBarColor(); - - if( backgroundColor.isValid() ) - { - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 21, 14, 2, 2 ) ); - } - - } else { - - painter->drawPolygon( QPolygonF() - << QPointF( 19.5, 14.5 ) - << QPointF( 25, 9 ) - << QPointF( 28, 12 ) - << QPointF( 22.5, 17.5 ) ); - - painter->setPen( pen ); - painter->drawLine( QPointF( 18.5, 13.5 ), QPointF( 23.5, 18.5 ) ); - painter->drawLine( QPointF( 25, 12 ), QPointF( 17.5, 19.5 ) ); - } - break; - } - - case DecorationButtonType::Shade: - { - if( backgroundColor.isValid() ) - { - painter->setPen( Qt::NoPen ); - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - painter->setPen( pen ); - painter->setBrush( Qt::NoBrush ); - - painter->drawLine( 18, 12, 26, 12 ); - if (isChecked()) { - painter->drawPolyline( QPolygonF() - << QPointF( 18, 15 ) - << QPointF( 22, 19 ) - << QPointF( 26, 15 ) ); - - } else { - painter->drawPolyline( QPolygonF() - << QPointF( 18, 19 ) - << QPointF( 22, 15 ) - << QPointF( 26, 19 ) ); - } - - break; - - } - - case DecorationButtonType::KeepBelow: - { - if( backgroundColor.isValid() ) - { - painter->setPen( Qt::NoPen ); - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - painter->setPen( pen ); - painter->setBrush( Qt::NoBrush ); - - painter->drawPolyline( QPolygonF() - << QPointF( 18, 11 ) - << QPointF( 22, 15 ) - << QPointF( 26, 11 ) ); - - painter->drawPolyline( QPolygonF() - << QPointF( 18, 15 ) - << QPointF( 22, 19 ) - << QPointF( 26, 15 ) ); - break; - - } - - case DecorationButtonType::KeepAbove: - { - if( backgroundColor.isValid() ) - { - painter->setPen( Qt::NoPen ); - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - painter->setPen( pen ); - painter->setBrush( Qt::NoBrush ); - - painter->drawPolyline( QPolygonF() - << QPointF( 18, 15 ) - << QPointF( 22, 11 ) - << QPointF( 26, 15 ) ); - - painter->drawPolyline( QPolygonF() - << QPointF( 18, 19 ) - << QPointF( 22, 15 ) - << QPointF( 26, 19 ) ); - break; - } - - - case DecorationButtonType::ApplicationMenu: - { - if( backgroundColor.isValid() ) - { - painter->setPen( Qt::NoPen ); - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - painter->setPen( pen ); - painter->setBrush( Qt::NoBrush ); - - painter->drawLine( QPointF( 15, 11.5 ), QPointF( 30, 11.5 ) ); - painter->drawLine( QPointF( 15, 15.5 ), QPointF( 30, 15.5 ) ); - painter->drawLine( QPointF( 15, 19.5 ), QPointF( 30, 19.5 ) ); - break; - } - - case DecorationButtonType::ContextHelp: - { - if( backgroundColor.isValid() ) - { - painter->setPen( Qt::NoPen ); - painter->setBrush( backgroundColor ); - painter->drawRect( QRectF( 0, 0, 45, 30 ) ); - } - painter->setPen( pen ); - painter->setBrush( Qt::NoBrush ); - - QPainterPath path; - path.moveTo( 18, 12 ); - path.arcTo( QRectF( 18, 9.5, 8, 5 ), 180, -180 ); - path.cubicTo( QPointF(26.5, 15.5), QPointF( 22, 13.5 ), QPointF( 22, 17.5 ) ); - painter->drawPath( path ); - - painter->drawPoint( 22, 21 ); - - break; - } - - default: break; - - } - - } - - } - - //__________________________________________________________________ - QColor Button::foregroundColor() const - { - auto d = qobject_cast( decoration() ); - if( !d ) { - - return QColor(); - - } else if( ( type() == DecorationButtonType::KeepBelow || type() == DecorationButtonType::KeepAbove ) && isChecked() ) { - - return d->titleBarColor(); - - } else if( m_animation->state() == QPropertyAnimation::Running && type() == DecorationButtonType::Close ) { - - return KColorUtils::mix( d->fontColor(), Qt::white, m_opacity ); - - } else if( isHovered() && type() == DecorationButtonType::Close ) { - - return Qt::white; - - } else { - - return d->fontColor(); - - } - - } - - //__________________________________________________________________ - QColor Button::backgroundColor() const - { - auto d = qobject_cast( decoration() ); - if( !d ) { - - return QColor(); - - } - - if( isPressed() ) { - - if( type() == DecorationButtonType::Close ) return KColorUtils::mix( Qt::red, Qt::black, 0.3 ); - else return KColorUtils::mix( d->titleBarColor(), d->fontColor(), 0.3 ); - - } else if( ( type() == DecorationButtonType::KeepBelow || type() == DecorationButtonType::KeepAbove ) && isChecked() ) { - - return d->fontColor(); - - } else if( m_animation->state() == QPropertyAnimation::Running ) { - - if( type() == DecorationButtonType::Close ) return KColorUtils::mix( d->titleBarColor(), Qt::red, m_opacity ); - else { - - QColor color( KColorUtils::mix( d->titleBarColor(), d->fontColor(), 0.2 ) ); - color.setAlpha( color.alpha()*m_opacity ); - return color; - - } - - } else if( isHovered() ) { - - if( type() == DecorationButtonType::Close ) return Qt::red; - else return KColorUtils::mix( d->titleBarColor(), d->fontColor(), 0.2 ); - - } else { - - return QColor(); - - } - - } - - //________________________________________________________________ - void Button::reconfigure() - { - - // animation - auto d = qobject_cast(decoration()); - if( d ) m_animation->setDuration( d->internalSettings()->animationsDuration() ); - - } - - //__________________________________________________________________ - void Button::updateAnimationState( bool hovered ) - { - - auto d = qobject_cast(decoration()); - if( !(d && d->internalSettings()->animationsEnabled() ) ) return; - - QAbstractAnimation::Direction dir = hovered ? QPropertyAnimation::Forward : QPropertyAnimation::Backward; - if( m_animation->state() == QPropertyAnimation::Running && m_animation->direction() != dir ) - m_animation->stop(); - m_animation->setDirection( dir ); - if( m_animation->state() != QPropertyAnimation::Running ) m_animation->start(); - - } - -} // namespace diff --git a/breezebutton.h b/breezebutton.h deleted file mode 100644 index 835d119..0000000 --- a/breezebutton.h +++ /dev/null @@ -1,140 +0,0 @@ -#ifndef BREEZE_BUTTONS_H -#define BREEZE_BUTTONS_H - -/* -* Copyright 2014 Martin Gräßlin -* Copyright 2014 Hugo Pereira Da Costa -* -* 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 (at your option) version 3 or any later version -* accepted by the membership of KDE e.V. (or its successor approved -* by the membership of KDE e.V.), which shall act as a proxy -* defined in Section 14 of version 3 of the license. -* -* 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 . -*/ -#include -#include "breezedecoration.h" - -#include -#include -#include - -namespace Breeze -{ - - class Button : public KDecoration2::DecorationButton - { - Q_OBJECT - - //* declare active state opacity - Q_PROPERTY( qreal opacity READ opacity WRITE setOpacity ) - - public: - - //* constructor - explicit Button(QObject *parent, const QVariantList &args); - - //* destructor - virtual ~Button() = default; - - //* button creation - static Button *create(KDecoration2::DecorationButtonType type, KDecoration2::Decoration *decoration, QObject *parent); - - //* render - virtual void paint(QPainter *painter, const QRect &repaintRegion) override; - - //* flag - enum Flag - { - FlagNone, - FlagStandalone, - FlagFirstInList, - FlagLastInList - }; - - //* flag - void setFlag( Flag value ) - { m_flag = value; } - - //* standalone buttons - bool isStandAlone() const { return m_flag == FlagStandalone; } - - //* offset - void setOffset( const QPointF& value ) - { m_offset = value; } - - //* horizontal offset, for rendering - void setHorizontalOffset( qreal value ) - { m_offset.setX( value ); } - - //* vertical offset, for rendering - void setVerticalOffset( qreal value ) - { m_offset.setY( value ); } - - //* set icon size - void setIconSize( const QSize& value ) - { m_iconSize = value; } - - //*@name active state change animation - //@{ - void setOpacity( qreal value ) - { - if( m_opacity == value ) return; - m_opacity = value; - update(); - } - - qreal opacity() const - { return m_opacity; } - - //@} - - private Q_SLOTS: - - //* apply configuration changes - void reconfigure(); - - //* animation state - void updateAnimationState(bool); - - private: - - //* private constructor - explicit Button(KDecoration2::DecorationButtonType type, Decoration *decoration, QObject *parent = nullptr); - - //* draw button icon - void drawIcon( QPainter *) const; - - //*@name colors - //@{ - QColor foregroundColor() const; - QColor backgroundColor() const; - //@} - - Flag m_flag = FlagNone; - - //* active state change animation - QPropertyAnimation *m_animation; - - //* vertical offset (for rendering) - QPointF m_offset; - - //* icon size - QSize m_iconSize; - - //* active state change opacity - qreal m_opacity = 0; - }; - -} // namespace - -#endif diff --git a/breezedecoration.cpp b/breezedecoration.cpp deleted file mode 100644 index 1721b70..0000000 --- a/breezedecoration.cpp +++ /dev/null @@ -1,768 +0,0 @@ -/* -* Copyright 2014 Martin Gräßlin -* Copyright 2014 Hugo Pereira Da Costa -* -* 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 (at your option) version 3 or any later version -* accepted by the membership of KDE e.V. (or its successor approved -* by the membership of KDE e.V.), which shall act as a proxy -* defined in Section 14 of version 3 of the license. -* -* 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 . -*/ - -#include "breezedecoration.h" - -#include "breeze.h" -#include "breezesettingsprovider.h" -#include "config-breeze.h" -#include "config/breezeconfigwidget.h" - -#include "breezebutton.h" -#include "breezesizegrip.h" - -#include "breezeboxshadowrenderer.h" - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#if BREEZE_HAVE_X11 -#include -#endif - -#include - -K_PLUGIN_FACTORY_WITH_JSON( - BreezeDecoFactory, - "breeze.json", - registerPlugin(); - registerPlugin(QStringLiteral("button")); - registerPlugin(QStringLiteral("kcmodule")); -) - -namespace -{ - struct ShadowParams { - ShadowParams() - : offset(QPoint(0, 0)) - , radius(0) - , opacity(0) {} - - ShadowParams(const QPoint &offset, int radius, qreal opacity) - : offset(offset) - , radius(radius) - , opacity(opacity) {} - - QPoint offset; - int radius; - qreal opacity; - }; - - struct CompositeShadowParams { - CompositeShadowParams() = default; - - CompositeShadowParams( - const QPoint &offset, - const ShadowParams &shadow1, - const ShadowParams &shadow2) - : offset(offset) - , shadow1(shadow1) - , shadow2(shadow2) {} - - bool isNone() const { - return qMax(shadow1.radius, shadow2.radius) == 0; - } - - QPoint offset; - ShadowParams shadow1; - ShadowParams shadow2; - }; - - const CompositeShadowParams s_shadowParams[] = { - // None - CompositeShadowParams(), - // Small - CompositeShadowParams( - QPoint(0, 4), - ShadowParams(QPoint(0, 0), 16, 1), - ShadowParams(QPoint(0, -2), 8, 0.4)), - // Medium - CompositeShadowParams( - QPoint(0, 8), - ShadowParams(QPoint(0, 0), 32, 0.9), - ShadowParams(QPoint(0, -4), 16, 0.3)), - // Large - CompositeShadowParams( - QPoint(0, 12), - ShadowParams(QPoint(0, 0), 48, 0.8), - ShadowParams(QPoint(0, -6), 24, 0.2)), - // Very large - CompositeShadowParams( - QPoint(0, 16), - ShadowParams(QPoint(0, 0), 64, 0.7), - ShadowParams(QPoint(0, -8), 32, 0.1)), - }; - - inline CompositeShadowParams lookupShadowParams(int size) - { - switch (size) { - case Breeze::InternalSettings::ShadowNone: - return s_shadowParams[0]; - case Breeze::InternalSettings::ShadowSmall: - return s_shadowParams[1]; - case Breeze::InternalSettings::ShadowMedium: - return s_shadowParams[2]; - case Breeze::InternalSettings::ShadowLarge: - return s_shadowParams[3]; - case Breeze::InternalSettings::ShadowVeryLarge: - return s_shadowParams[4]; - default: - // Fallback to the Large size. - return s_shadowParams[3]; - } - } -} - -namespace Breeze -{ - - using KDecoration2::ColorRole; - using KDecoration2::ColorGroup; - using KDecoration2::DecorationButtonType; - - //________________________________________________________________ - static int g_sDecoCount = 0; - static int g_shadowSizeEnum = InternalSettings::ShadowLarge; - static int g_shadowStrength = 255; - static QColor g_shadowColor = Qt::black; - static QSharedPointer g_sShadow; - - //________________________________________________________________ - Decoration::Decoration(QObject *parent, const QVariantList &args) - : KDecoration2::Decoration(parent, args) - , m_animation( new QPropertyAnimation( this ) ) - { - g_sDecoCount++; - } - - //________________________________________________________________ - Decoration::~Decoration() - { - g_sDecoCount--; - if (g_sDecoCount == 0) { - // last deco destroyed, clean up shadow - g_sShadow.clear(); - } - - deleteSizeGrip(); - - } - - //________________________________________________________________ - void Decoration::setOpacity( qreal value ) - { - if( m_opacity == value ) return; - m_opacity = value; - update(); - - if( m_sizeGrip ) m_sizeGrip->update(); - } - - //________________________________________________________________ - QColor Decoration::titleBarColor() const - { - - auto c = client().data(); - if( hideTitleBar() ) return c->color( ColorGroup::Inactive, ColorRole::TitleBar ); - else if( m_animation->state() == QPropertyAnimation::Running ) - { - return KColorUtils::mix( - c->color( ColorGroup::Inactive, ColorRole::TitleBar ), - c->color( ColorGroup::Active, ColorRole::TitleBar ), - m_opacity ); - } else return c->color( c->isActive() ? ColorGroup::Active : ColorGroup::Inactive, ColorRole::TitleBar ); - - } - - //________________________________________________________________ - QColor Decoration::fontColor() const - { - - auto c = client().data(); - if( m_animation->state() == QPropertyAnimation::Running ) - { - return KColorUtils::mix( - c->color( ColorGroup::Inactive, ColorRole::Foreground ), - c->color( ColorGroup::Active, ColorRole::Foreground ), - m_opacity ); - } else return c->color( c->isActive() ? ColorGroup::Active : ColorGroup::Inactive, ColorRole::Foreground ); - - } - - //________________________________________________________________ - void Decoration::init() - { - auto c = client().data(); - - // active state change animation - m_animation->setStartValue( 0 ); - m_animation->setEndValue( 1.0 ); - m_animation->setTargetObject( this ); - m_animation->setPropertyName( "opacity" ); - m_animation->setEasingCurve( QEasingCurve::InOutQuad ); - - reconfigure(); - updateTitleBar(); - auto s = settings(); - connect(s.data(), &KDecoration2::DecorationSettings::borderSizeChanged, this, &Decoration::recalculateBorders); - - // a change in font might cause the borders to change - recalculateBorders(); - connect(s.data(), &KDecoration2::DecorationSettings::spacingChanged, this, &Decoration::recalculateBorders); - - // buttons - connect(s.data(), &KDecoration2::DecorationSettings::spacingChanged, this, &Decoration::updateButtonsGeometryDelayed); - connect(s.data(), &KDecoration2::DecorationSettings::decorationButtonsLeftChanged, this, &Decoration::updateButtonsGeometryDelayed); - connect(s.data(), &KDecoration2::DecorationSettings::decorationButtonsRightChanged, this, &Decoration::updateButtonsGeometryDelayed); - - // full reconfiguration - connect(s.data(), &KDecoration2::DecorationSettings::reconfigured, this, &Decoration::reconfigure); - connect(s.data(), &KDecoration2::DecorationSettings::reconfigured, SettingsProvider::self(), &SettingsProvider::reconfigure, Qt::UniqueConnection ); - connect(s.data(), &KDecoration2::DecorationSettings::reconfigured, this, &Decoration::updateButtonsGeometryDelayed); - - connect(c, &KDecoration2::DecoratedClient::adjacentScreenEdgesChanged, this, &Decoration::recalculateBorders); - connect(c, &KDecoration2::DecoratedClient::maximizedHorizontallyChanged, this, &Decoration::recalculateBorders); - connect(c, &KDecoration2::DecoratedClient::maximizedVerticallyChanged, this, &Decoration::recalculateBorders); - connect(c, &KDecoration2::DecoratedClient::shadedChanged, this, &Decoration::recalculateBorders); - connect(c, &KDecoration2::DecoratedClient::captionChanged, this, - [this]() - { - // update the caption area - update(titleBar()); - } - ); - - connect(c, &KDecoration2::DecoratedClient::activeChanged, this, &Decoration::updateAnimationState); - connect(c, &KDecoration2::DecoratedClient::widthChanged, this, &Decoration::updateTitleBar); - connect(c, &KDecoration2::DecoratedClient::maximizedChanged, this, &Decoration::updateTitleBar); - //connect(c, &KDecoration2::DecoratedClient::maximizedChanged, this, &Decoration::setOpaque); - - connect(c, &KDecoration2::DecoratedClient::widthChanged, this, &Decoration::updateButtonsGeometry); - connect(c, &KDecoration2::DecoratedClient::maximizedChanged, this, &Decoration::updateButtonsGeometry); - connect(c, &KDecoration2::DecoratedClient::adjacentScreenEdgesChanged, this, &Decoration::updateButtonsGeometry); - connect(c, &KDecoration2::DecoratedClient::shadedChanged, this, &Decoration::updateButtonsGeometry); - - createButtons(); - createShadow(); - } - - //________________________________________________________________ - void Decoration::updateTitleBar() - { - auto s = settings(); - auto c = client().data(); - const bool maximized = isMaximized(); - const int width = c->width() - (borderSize()*2); - const int height = maximized ? borderTop() : borderTop() - borderSize(); - const int x = borderSize(); - const int y = maximized ? 0 : borderSize(); - setTitleBar(QRect(x, y, width, height)); - } - - //________________________________________________________________ - void Decoration::updateAnimationState() - { - if( m_internalSettings->animationsEnabled() ) - { - - auto c = client().data(); - m_animation->setDirection( c->isActive() ? QPropertyAnimation::Forward : QPropertyAnimation::Backward ); - if( m_animation->state() != QPropertyAnimation::Running ) m_animation->start(); - - } else { - - update(); - - } - } - - //________________________________________________________________ - void Decoration::updateSizeGripVisibility() - { - auto c = client().data(); - if( m_sizeGrip ) - { m_sizeGrip->setVisible( c->isResizeable() && !isMaximized() && !c->isShaded() ); } - } - - //________________________________________________________________ - int Decoration::borderSize(bool bottom) const - { - const int baseSize = settings()->smallSpacing(); - if( m_internalSettings && (m_internalSettings->mask() & BorderSize ) ) - { - switch (m_internalSettings->borderSize()) { - case InternalSettings::BorderNone: return 0; - case InternalSettings::BorderNoSides: return bottom ? qMax(4, baseSize) : 0; - default: - case InternalSettings::BorderTiny: return baseSize/2; - case InternalSettings::BorderNormal: return baseSize; - case InternalSettings::BorderLarge: return baseSize*2; - case InternalSettings::BorderVeryLarge: return baseSize*3; - case InternalSettings::BorderHuge: return baseSize*4; - case InternalSettings::BorderVeryHuge: return baseSize*5; - case InternalSettings::BorderOversized: return baseSize*8; - } - - } else { - - switch (settings()->borderSize()) { - case KDecoration2::BorderSize::None: return 0; - case KDecoration2::BorderSize::NoSides: return bottom ? qMax(4, baseSize) : 0; - default: - case KDecoration2::BorderSize::Tiny: return baseSize/2; - case KDecoration2::BorderSize::Normal: return baseSize; - case KDecoration2::BorderSize::Large: return baseSize*2; - case KDecoration2::BorderSize::VeryLarge: return baseSize*3; - case KDecoration2::BorderSize::Huge: return baseSize*4; - case KDecoration2::BorderSize::VeryHuge: return baseSize*5; - case KDecoration2::BorderSize::Oversized: return baseSize*8; - - } - - } - } - - //________________________________________________________________ - void Decoration::reconfigure() - { - - m_internalSettings = SettingsProvider::self()->internalSettings( this ); - - // animation - m_animation->setDuration( m_internalSettings->animationsDuration() ); - - // borders - recalculateBorders(); - - // shadow - createShadow(); - - // size grip - if( hasNoBorders() && m_internalSettings->drawSizeGrip() ) createSizeGrip(); - else deleteSizeGrip(); - - } - - //________________________________________________________________ - void Decoration::recalculateBorders() - { - auto c = client().data(); - auto s = settings(); - - // left, right and bottom borders - const int left = isLeftEdge() ? 0 : borderSize(); - const int right = isRightEdge() ? 0 : borderSize(); - const int bottom = (c->isShaded() || isBottomEdge()) ? 0 : borderSize(true); - - int top = 0; - if( hideTitleBar() ) top = bottom; - else { - top += isMaximized() ? 0 : borderSize(); - QFont f; f.fromString(m_internalSettings->titleBarFont()); - QFontMetrics fm(f); - top += qMax(fm.height(), buttonHeight() ); - } - - setBorders(QMargins(left, top, right, bottom)); - - // extended sizes - const int extSize = s->largeSpacing(); - int extSides = 0; - int extTop = 0; - int extBottom = 0; - if( hasNoBorders() || borderSize() < 2 ) - { - extSides = extSize; - extBottom = extSize; - extTop = extSize; - } else if( hasNoSideBorders() ) { - extSides = extSize; - } - - setResizeOnlyBorders(QMargins(extSides, extTop, extSides, extBottom)); - } - - //________________________________________________________________ - void Decoration::createButtons() - { - m_leftButtons = new KDecoration2::DecorationButtonGroup(KDecoration2::DecorationButtonGroup::Position::Left, this, &Button::create); - m_rightButtons = new KDecoration2::DecorationButtonGroup(KDecoration2::DecorationButtonGroup::Position::Right, this, &Button::create); - updateButtonsGeometry(); - } - - //________________________________________________________________ - void Decoration::updateButtonsGeometryDelayed() - { QTimer::singleShot( 0, this, &Decoration::updateButtonsGeometry ); } - - //________________________________________________________________ - void Decoration::updateButtonsGeometry() - { - const auto s = settings(); - - // adjust button position - const int bHeight = buttonHeight(); - foreach( const QPointer& button, m_leftButtons->buttons() + m_rightButtons->buttons() ) - { - const int bWidth = buttonHeight() * (button.data()->type() == DecorationButtonType::Menu ? 1.002 : 1.51); - button.data()->setGeometry( QRectF( QPoint( 0, 0 ), QSizeF( bWidth, bHeight ) ) ); - static_cast( button.data() )->setIconSize( QSize( bWidth, bHeight ) ); - } - - const bool maximized = isMaximized(); - - // left buttons - if( !m_leftButtons->buttons().isEmpty() ) - { - - m_leftButtons->setSpacing(0); - - m_leftButtons->setPos(QPointF(borderLeft(), maximized ? 0 : borderSize())); - - } - - // right buttons - if( !m_rightButtons->buttons().isEmpty() ) - { - - m_rightButtons->setSpacing(0); - - // padding - m_rightButtons->setPos(QPointF(size().width() - m_rightButtons->geometry().width() - borderRight(), maximized ? 0 : borderSize())); - - } - - update(); - - } - - //________________________________________________________________ - void Decoration::paint(QPainter *painter, const QRect &repaintRegion) - { - // TODO: optimize based on repaintRegion - auto c = client().data(); - auto s = settings(); - - const bool maximized = isMaximized(); - - // paint background - if( borderSize() > 0 ) - { - painter->fillRect(rect(), Qt::transparent); - painter->save(); - painter->setRenderHint(QPainter::Antialiasing); - painter->setPen(Qt::NoPen); - - QColor winCol = c->isActive() ? KColorUtils::mix( titleBarColor(), Qt::black, 0.3 ) : titleBarColor(); - winCol.setAlpha(titleBarAlpha()); - painter->setBrush(winCol); - - // clip away the titlebar part - if( !hideTitleBar() ) - { - QRegion outerReg(rect()); - QRegion innerReg(QRect(borderLeft(), maximized ? 0 : borderSize(), size().width() - borderLeft() - borderRight(), buttonHeight())); - painter->setClipRegion(outerReg.subtracted(innerReg)); - } - - painter->drawRect( rect() ); - - painter->restore(); - } - - if( !hideTitleBar() ) paintTitleBar(painter, repaintRegion); - - if( hasBorders() && !s->isAlphaChannelSupported() ) - { - painter->save(); - painter->setRenderHint(QPainter::Antialiasing, false); - painter->setBrush( Qt::NoBrush ); - painter->setPen( c->isActive() ? - c->color( ColorGroup::Active, ColorRole::TitleBar ): - c->color( ColorGroup::Inactive, ColorRole::Foreground ) ); - - painter->drawRect( rect().adjusted( 0, 0, -1, -1 ) ); - painter->restore(); - } - - } - - //________________________________________________________________ - void Decoration::paintTitleBar(QPainter *painter, const QRect &repaintRegion) - { - const auto c = client().data(); - const bool maximized = isMaximized(); - const QRect titleRect(QPoint(borderLeft(), maximized ? 0 : borderSize()), QSize(size().width() - borderLeft() - borderRight(), buttonHeight())); - - if ( !titleRect.intersects(repaintRegion) ) return; - - painter->save(); - painter->setPen(Qt::NoPen); - - QColor titleBarColor = this->titleBarColor(); - titleBarColor.setAlpha(titleBarAlpha()); - - painter->setBrush( titleBarColor ); - - auto s = settings(); - painter->drawRect(titleRect); - - painter->restore(); - - // draw caption - QFont f; f.fromString(m_internalSettings->titleBarFont()); - // KDE needs this FIXME: Why? - QFontDatabase fd; f.setStyleName(fd.styleString(f)); - painter->setFont(f); - painter->setPen( fontColor() ); - const auto cR = captionRect(); - const QString caption = painter->fontMetrics().elidedText(c->caption(), Qt::ElideMiddle, cR.first.width()); - painter->drawText(cR.first, cR.second | Qt::TextSingleLine, caption); - - // draw all buttons - m_leftButtons->paint(painter, repaintRegion); - m_rightButtons->paint(painter, repaintRegion); - } - - //________________________________________________________________ - int Decoration::buttonHeight() const - { - const int baseSize = 10; //settings()->gridUnit(); - switch( m_internalSettings->buttonSize() ) - { - case InternalSettings::ButtonTiny: return baseSize; - case InternalSettings::ButtonSmall: return baseSize*2; - default: - case InternalSettings::ButtonDefault: return baseSize*3; - case InternalSettings::ButtonLarge: return baseSize*4; - case InternalSettings::ButtonVeryLarge: return baseSize*5; - } - - } - - //________________________________________________________________ - int Decoration::iconSize() const - { - const int baseSize = 16; - switch( m_internalSettings->buttonSize() ) - { - case InternalSettings::ButtonTiny: return baseSize/2; - case InternalSettings::ButtonSmall: return baseSize; - default: - case InternalSettings::ButtonDefault: return baseSize; - case InternalSettings::ButtonLarge: return baseSize*1.5; - case InternalSettings::ButtonVeryLarge: return baseSize*2; - } - - } - - //________________________________________________________________ - QPair Decoration::captionRect() const - { - if( hideTitleBar() ) return qMakePair( QRect(), Qt::AlignCenter ); - else { - - auto c = client().data(); - int leftOffset = m_leftButtons->buttons().isEmpty() ? - 4.0*settings()->smallSpacing(): - m_leftButtons->geometry().x() + m_leftButtons->geometry().width() + 4.0*settings()->smallSpacing(); - - if (!m_leftButtons->buttons().isEmpty() - && m_leftButtons->buttons().last().data()->type() == DecorationButtonType::Menu - && m_internalSettings->titleAlignment() == InternalSettings::AlignLeft) - { - leftOffset -= 4.0 * settings()->smallSpacing(); - } - - - const int rightOffset = m_rightButtons->buttons().isEmpty() ? - 4.0*settings()->smallSpacing() : - size().width() - m_rightButtons->geometry().x() + 4.0*settings()->smallSpacing(); - - const int yOffset = isMaximized() ? 0 : borderSize(); - const QRect maxRect( leftOffset, yOffset, size().width() - leftOffset - rightOffset, buttonHeight() ); - - switch( m_internalSettings->titleAlignment() ) - { - case InternalSettings::AlignLeft: - return qMakePair( maxRect, Qt::AlignVCenter|Qt::AlignLeft ); - - case InternalSettings::AlignRight: - return qMakePair( maxRect, Qt::AlignVCenter|Qt::AlignRight ); - - case InternalSettings::AlignCenter: - return qMakePair( maxRect, Qt::AlignCenter ); - - default: - case InternalSettings::AlignCenterFullWidth: - { - - // full caption rect - const QRect fullRect = QRect( 0, yOffset, size().width(), buttonHeight() ); - QFont f; f.fromString(m_internalSettings->titleBarFont()); - QFontMetrics fm(f); - QRect boundingRect( fm.boundingRect( c->caption()) ); - - // text bounding rect - boundingRect.setTop( yOffset ); - boundingRect.setHeight( buttonHeight() ); - boundingRect.moveLeft( ( size().width() - boundingRect.width() )/2 ); - - if( boundingRect.left() < leftOffset ) return qMakePair( maxRect, Qt::AlignVCenter|Qt::AlignLeft ); - else if( boundingRect.right() > size().width() - rightOffset ) return qMakePair( maxRect, Qt::AlignVCenter|Qt::AlignRight ); - else return qMakePair(fullRect, Qt::AlignCenter); - - } - - } - - } - - } - - //________________________________________________________________ - void Decoration::createShadow() - { - if (!g_sShadow - ||g_shadowSizeEnum != m_internalSettings->shadowSize() - || g_shadowStrength != m_internalSettings->shadowStrength() - || g_shadowColor != m_internalSettings->shadowColor()) - { - g_shadowSizeEnum = m_internalSettings->shadowSize(); - g_shadowStrength = m_internalSettings->shadowStrength(); - g_shadowColor = m_internalSettings->shadowColor(); - - const CompositeShadowParams params = lookupShadowParams(g_shadowSizeEnum); - if (params.isNone()) { - g_sShadow.clear(); - setShadow(g_sShadow); - return; - } - - auto withOpacity = [](const QColor &color, qreal opacity) -> QColor { - QColor c(color); - c.setAlphaF(opacity); - return c; - }; - - const QSize boxSize = BoxShadowRenderer::calculateMinimumBoxSize(params.shadow1.radius) - .expandedTo(BoxShadowRenderer::calculateMinimumBoxSize(params.shadow2.radius)); - - BoxShadowRenderer shadowRenderer; - shadowRenderer.setBorderRadius(0.5); - shadowRenderer.setBoxSize(boxSize); - shadowRenderer.setDevicePixelRatio(1.0); // TODO: Create HiDPI shadows? - - const qreal strength = static_cast(g_shadowStrength) / 255.0; - shadowRenderer.addShadow(params.shadow1.offset, params.shadow1.radius, - withOpacity(g_shadowColor, params.shadow1.opacity * strength)); - shadowRenderer.addShadow(params.shadow2.offset, params.shadow2.radius, - withOpacity(g_shadowColor, params.shadow2.opacity * strength)); - - QImage shadowTexture = shadowRenderer.render(); - - QPainter painter(&shadowTexture); - painter.setRenderHint(QPainter::Antialiasing); - - const QRect outerRect = shadowTexture.rect(); - - QRect boxRect(QPoint(0, 0), boxSize); - boxRect.moveCenter(outerRect.center()); - - // Mask out inner rect. - const QMargins padding = QMargins( - boxRect.left() - outerRect.left() - Metrics::Shadow_Overlap - params.offset.x(), - boxRect.top() - outerRect.top() - Metrics::Shadow_Overlap - params.offset.y(), - outerRect.right() - boxRect.right() - Metrics::Shadow_Overlap + params.offset.x(), - outerRect.bottom() - boxRect.bottom() - Metrics::Shadow_Overlap + params.offset.y()); - const QRect innerRect = outerRect - padding; - - painter.setPen(Qt::NoPen); - painter.setBrush(Qt::black); - painter.setCompositionMode(QPainter::CompositionMode_DestinationOut); - painter.drawRoundedRect(innerRect, 0.5, 0.5); - - // Draw outline. - painter.setPen(withOpacity(g_shadowColor, 0.2 * strength)); - painter.setBrush(Qt::NoBrush); - painter.setCompositionMode(QPainter::CompositionMode_SourceOver); - painter.drawRoundedRect(innerRect, -0.5, -0.5); - - painter.end(); - - g_sShadow = QSharedPointer::create(); - g_sShadow->setPadding(padding); - g_sShadow->setInnerShadowRect(QRect(outerRect.center(), QSize(1, 1))); - g_sShadow->setShadow(shadowTexture); - } - - setShadow(g_sShadow); - } - - //_________________________________________________________________ - void Decoration::createSizeGrip() - { - - // do nothing if size grip already exist - if( m_sizeGrip ) return; - - #if BREEZE_HAVE_X11 - if( !QX11Info::isPlatformX11() ) return; - - // access client - auto c = client().data(); - if( !c ) return; - - if( c->windowId() != 0 ) - { - m_sizeGrip = new SizeGrip( this ); - connect( c, &KDecoration2::DecoratedClient::maximizedChanged, this, &Decoration::updateSizeGripVisibility ); - connect( c, &KDecoration2::DecoratedClient::shadedChanged, this, &Decoration::updateSizeGripVisibility ); - connect( c, &KDecoration2::DecoratedClient::resizeableChanged, this, &Decoration::updateSizeGripVisibility ); - } - #endif - - } - - //_________________________________________________________________ - void Decoration::deleteSizeGrip() - { - if( m_sizeGrip ) - { - m_sizeGrip->deleteLater(); - m_sizeGrip = nullptr; - } - } - -} // namespace - - -#include "breezedecoration.moc" diff --git a/breezedecoration.h b/breezedecoration.h deleted file mode 100644 index 5551ddc..0000000 --- a/breezedecoration.h +++ /dev/null @@ -1,221 +0,0 @@ -#ifndef BREEZE_DECORATION_H -#define BREEZE_DECORATION_H - -/* - * Copyright 2014 Martin Gräßlin - * Copyright 2014 Hugo Pereira Da Costa - * - * 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 (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * 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 . - */ - -#include "breeze.h" -#include "breezesettings.h" - -#include -#include -#include - -#include -#include -#include - -namespace KDecoration2 -{ - class DecorationButton; - class DecorationButtonGroup; -} - -namespace Breeze -{ - class SizeGrip; - class Decoration : public KDecoration2::Decoration - { - Q_OBJECT - - //* declare active state opacity - Q_PROPERTY( qreal opacity READ opacity WRITE setOpacity ) - - public: - - //* constructor - explicit Decoration(QObject *parent = nullptr, const QVariantList &args = QVariantList()); - - //* destructor - virtual ~Decoration(); - - //* paint - void paint(QPainter *painter, const QRect &repaintRegion) override; - - //* internal settings - InternalSettingsPtr internalSettings() const - { return m_internalSettings; } - - //* caption height - int captionHeight() const; - - //* button height - int buttonHeight() const; - - //* icon size - int iconSize() const; - - //*@name active state change animation - //@{ - void setOpacity( qreal ); - - qreal opacity() const - { return m_opacity; } - - //@} - - //*@name colors - //@{ - QColor titleBarColor() const; - QColor outlineColor() const; - QColor fontColor() const; - //@} - - //*@name maximization modes - //@{ - inline bool isMaximized() const; - inline bool isMaximizedHorizontally() const; - inline bool isMaximizedVertically() const; - - inline bool isLeftEdge() const; - inline bool isRightEdge() const; - inline bool isTopEdge() const; - inline bool isBottomEdge() const; - - inline bool hideTitleBar() const; - //@} - - public Q_SLOTS: - void init() override; - - private Q_SLOTS: - void reconfigure(); - void recalculateBorders(); - void updateButtonsGeometry(); - void updateButtonsGeometryDelayed(); - void updateTitleBar(); - void updateAnimationState(); - void updateSizeGripVisibility(); - - private: - - //* return the rect in which caption will be drawn - QPair captionRect() const; - - void createButtons(); - void paintTitleBar(QPainter *painter, const QRect &repaintRegion); - void createShadow(); - - //*@name border size - //@{ - int borderSize(bool bottom = false) const; - inline bool hasBorders() const; - inline bool hasNoBorders() const; - inline bool hasNoSideBorders() const; - //@} - - //*@name color customization - //@{ - inline bool opaqueTitleBar() const; - inline int titleBarAlpha() const; - //@} - - //*@name size grip - //@{ - void createSizeGrip(); - void deleteSizeGrip(); - SizeGrip* sizeGrip() const - { return m_sizeGrip; } - //@} - - InternalSettingsPtr m_internalSettings; - KDecoration2::DecorationButtonGroup *m_leftButtons = nullptr; - KDecoration2::DecorationButtonGroup *m_rightButtons = nullptr; - - //* size grip widget - SizeGrip *m_sizeGrip = nullptr; - - //* active state change animation - QPropertyAnimation *m_animation; - - //* active state change opacity - qreal m_opacity = 0; - - }; - - bool Decoration::hasBorders() const - { - if( m_internalSettings && m_internalSettings->mask() & BorderSize ) return m_internalSettings->borderSize() > InternalSettings::BorderNoSides; - else return settings()->borderSize() > KDecoration2::BorderSize::NoSides; - } - - bool Decoration::hasNoBorders() const - { - if( m_internalSettings && m_internalSettings->mask() & BorderSize ) return m_internalSettings->borderSize() == InternalSettings::BorderNone; - else return settings()->borderSize() == KDecoration2::BorderSize::None; - } - - bool Decoration::hasNoSideBorders() const - { - if( m_internalSettings && m_internalSettings->mask() & BorderSize ) return m_internalSettings->borderSize() == InternalSettings::BorderNoSides; - else return settings()->borderSize() == KDecoration2::BorderSize::NoSides; - } - - bool Decoration::isMaximized() const - { return client().data()->isMaximized() && !m_internalSettings->drawBorderOnMaximizedWindows(); } - - bool Decoration::isMaximizedHorizontally() const - { return client().data()->isMaximizedHorizontally() && !m_internalSettings->drawBorderOnMaximizedWindows(); } - - bool Decoration::isMaximizedVertically() const - { return client().data()->isMaximizedVertically() && !m_internalSettings->drawBorderOnMaximizedWindows(); } - - bool Decoration::isLeftEdge() const - { return (client().data()->isMaximizedHorizontally() || client().data()->adjacentScreenEdges().testFlag( Qt::LeftEdge ) ) && !m_internalSettings->drawBorderOnMaximizedWindows(); } - - bool Decoration::isRightEdge() const - { return (client().data()->isMaximizedHorizontally() || client().data()->adjacentScreenEdges().testFlag( Qt::RightEdge ) ) && !m_internalSettings->drawBorderOnMaximizedWindows(); } - - bool Decoration::isTopEdge() const - { return (client().data()->isMaximizedVertically() || client().data()->adjacentScreenEdges().testFlag( Qt::TopEdge ) ) && !m_internalSettings->drawBorderOnMaximizedWindows(); } - - bool Decoration::isBottomEdge() const - { return (client().data()->isMaximizedVertically() || client().data()->adjacentScreenEdges().testFlag( Qt::BottomEdge ) ) && !m_internalSettings->drawBorderOnMaximizedWindows(); } - - bool Decoration::hideTitleBar() const - { return m_internalSettings->hideTitleBar() && !client().data()->isShaded(); } - - bool Decoration::opaqueTitleBar() const - { return m_internalSettings->opaqueTitleBar(); } - - int Decoration::titleBarAlpha() const - { - if (m_internalSettings->opaqueTitleBar()) - return 255; - int a = m_internalSettings->opacityOverride() > -1 ? m_internalSettings->opacityOverride() - : m_internalSettings->backgroundOpacity(); - a = qBound(0, a, 100); - return qRound(static_cast(a) * static_cast(2.55)); - } - -} - -#endif diff --git a/breezeexceptionlist.cpp b/breezeexceptionlist.cpp deleted file mode 100644 index a9ac02e..0000000 --- a/breezeexceptionlist.cpp +++ /dev/null @@ -1,131 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// breezeexceptionlist.cpp -// window decoration exceptions -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezeexceptionlist.h" - - -namespace Breeze -{ - - //______________________________________________________________ - void ExceptionList::readConfig( KSharedConfig::Ptr config ) - { - - _exceptions.clear(); - - QString groupName; - for( int index = 0; config->hasGroup( groupName = exceptionGroupName( index ) ); ++index ) - { - - // create exception - InternalSettings exception; - - // reset group - readConfig( &exception, config.data(), groupName ); - - // create new configuration - InternalSettingsPtr configuration( new InternalSettings() ); - configuration.data()->load(); - - // apply changes from exception - configuration->setEnabled( exception.enabled() ); - configuration->setExceptionType( exception.exceptionType() ); - configuration->setExceptionPattern( exception.exceptionPattern() ); - configuration->setMask( exception.mask() ); - - // propagate all features found in mask to the output configuration - if( exception.mask() & BorderSize ) configuration->setBorderSize( exception.borderSize() ); - configuration->setHideTitleBar( exception.hideTitleBar() ); - configuration->setOpaqueTitleBar( exception.opaqueTitleBar() ); - configuration->setOpacityOverride( exception.opacityOverride() ); - configuration->setIsDialog( exception.isDialog() ); - - // append to exceptions - _exceptions.append( configuration ); - - } - - } - - //______________________________________________________________ - void ExceptionList::writeConfig( KSharedConfig::Ptr config ) - { - - // remove all existing exceptions - QString groupName; - for( int index = 0; config->hasGroup( groupName = exceptionGroupName( index ) ); ++index ) - { config->deleteGroup( groupName ); } - - // rewrite current exceptions - int index = 0; - foreach( const InternalSettingsPtr& exception, _exceptions ) - { - - writeConfig( exception.data(), config.data(), exceptionGroupName( index ) ); - ++index; - - } - - } - - //_______________________________________________________________________ - QString ExceptionList::exceptionGroupName( int index ) - { return QString( "Windeco Exception %1" ).arg( index ); } - - //______________________________________________________________ - void ExceptionList::writeConfig( KCoreConfigSkeleton* skeleton, KConfig* config, const QString& groupName ) - { - - // list of items to be written - QStringList keys = { "Enabled", "ExceptionPattern", "ExceptionType", "HideTitleBar", "IsDialog", "OpaqueTitleBar", "OpacityOverride", "Mask", "BorderSize"}; - - // write all items - foreach( auto key, keys ) - { - KConfigSkeletonItem* item( skeleton->findItem( key ) ); - if( !item ) continue; - - if( !groupName.isEmpty() ) item->setGroup( groupName ); - KConfigGroup configGroup( config, item->group() ); - configGroup.writeEntry( item->key(), item->property() ); - - } - - } - - //______________________________________________________________ - void ExceptionList::readConfig( KCoreConfigSkeleton* skeleton, KConfig* config, const QString& groupName ) - { - - foreach( KConfigSkeletonItem* item, skeleton->items() ) - { - if( !groupName.isEmpty() ) item->setGroup( groupName ); - item->readConfig( config ); - } - - } - -} diff --git a/breezeexceptionlist.h b/breezeexceptionlist.h deleted file mode 100644 index dbb0876..0000000 --- a/breezeexceptionlist.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef breezeexceptionlist_h -#define breezeexceptionlist_h - -////////////////////////////////////////////////////////////////////////////// -// breezeexceptionlist.h -// window decoration exceptions -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezesettings.h" -#include "breeze.h" - -#include - -namespace Breeze -{ - - //! breeze exceptions list - class ExceptionList - { - - public: - - //! constructor from list - explicit ExceptionList( const InternalSettingsList& exceptions = InternalSettingsList() ): - _exceptions( exceptions ) - {} - - //! exceptions - const InternalSettingsList& get( void ) const - { return _exceptions; } - - //! read from KConfig - void readConfig( KSharedConfig::Ptr ); - - //! write to kconfig - void writeConfig( KSharedConfig::Ptr ); - - protected: - - //! generate exception group name for given exception index - static QString exceptionGroupName( int index ); - - //! read configuration - static void readConfig( KCoreConfigSkeleton*, KConfig*, const QString& ); - - //! write configuration - static void writeConfig( KCoreConfigSkeleton*, KConfig*, const QString& ); - - private: - - //! exceptions - InternalSettingsList _exceptions; - - }; - -} - -#endif diff --git a/breezesettings.kcfgc b/breezesettings.kcfgc deleted file mode 100644 index d1d452e..0000000 --- a/breezesettings.kcfgc +++ /dev/null @@ -1,6 +0,0 @@ -File=breezesettingsdata.kcfg -ClassName=InternalSettings -NameSpace=Breeze -Singleton=false -Mutators=true -GlobalEnums=true diff --git a/breezesettingsdata.kcfg b/breezesettingsdata.kcfg deleted file mode 100644 index 4ea5da8..0000000 --- a/breezesettingsdata.kcfg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - 255 - 25 - 255 - - - - - - - - - - - - ShadowLarge - - - - 0, 0, 0 - - - - - true - - - - - - - - - - - - - - - - - - - - - BorderNoSides - - - - - - - - - - - AlignCenterFullWidth - - - - - - - - - - - - ButtonDefault - - - - - false - - - - false - - - - 100 - - - - - - - false - - - - - true - - - - 150 - - - - - false - - - - - false - - - - -1 - - - - - false - - - - - - - - - ExceptionWindowClassName - - - - - - true - - - - 0 - - - - - diff --git a/breezesettingsprovider.cpp b/breezesettingsprovider.cpp deleted file mode 100644 index ac8b9d9..0000000 --- a/breezesettingsprovider.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2014 Hugo Pereira Da Costa - * - * 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 (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * 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 . - */ - -#include "breezesettingsprovider.h" - -#include "breezeexceptionlist.h" - -#include - -#include - -namespace Breeze -{ - - SettingsProvider *SettingsProvider::s_self = nullptr; - - //__________________________________________________________________ - SettingsProvider::SettingsProvider(): - m_config( KSharedConfig::openConfig( QStringLiteral("breezerc") ) ) - { reconfigure(); } - - //__________________________________________________________________ - SettingsProvider::~SettingsProvider() - { s_self = nullptr; } - - //__________________________________________________________________ - SettingsProvider *SettingsProvider::self() - { - // TODO: this is not thread safe! - if (!s_self) - { s_self = new SettingsProvider(); } - - return s_self; - } - - //__________________________________________________________________ - void SettingsProvider::reconfigure() - { - if( !m_defaultSettings ) - { - m_defaultSettings = InternalSettingsPtr(new InternalSettings()); - m_defaultSettings->setCurrentGroup( QStringLiteral("Windeco") ); - } - - m_defaultSettings->load(); - - ExceptionList exceptions; - exceptions.readConfig( m_config ); - m_exceptions = exceptions.get(); - - } - - //__________________________________________________________________ - InternalSettingsPtr SettingsProvider::internalSettings( Decoration *decoration ) const - { - - QString windowTitle; - QString className; - - // get the client - auto client = decoration->client().data(); - - foreach( auto internalSettings, m_exceptions ) - { - - // discard disabled exceptions - if( !internalSettings->enabled() ) continue; - - // discard exceptions with empty exception pattern - if( internalSettings->exceptionPattern().isEmpty() ) continue; - - if (internalSettings->isDialog()) - { - KWindowInfo info(client->windowId(), NET::WMWindowType); - if (info.valid() - && info.windowType(NET::NormalMask | NET::DialogMask) != NET::Dialog) { - continue; - } - } - - /* - decide which value is to be compared - to the regular expression, based on exception type - */ - QString value; - switch( internalSettings->exceptionType() ) - { - case InternalSettings::ExceptionWindowTitle: - { - value = windowTitle.isEmpty() ? (windowTitle = client->caption()):windowTitle; - break; - } - - default: - case InternalSettings::ExceptionWindowClassName: - { - if( className.isEmpty() ) - { - // retrieve class name - KWindowInfo info( client->windowId(), nullptr, NET::WM2WindowClass ); - QString window_className( QString::fromUtf8(info.windowClassName()) ); - QString window_class( QString::fromUtf8(info.windowClassClass()) ); - className = window_className + QStringLiteral(" ") + window_class; - } - - value = className; - break; - } - - } - - // check matching - if( QRegExp( internalSettings->exceptionPattern() ).indexIn( value ) >= 0 ) - { return internalSettings; } - - } - - return m_defaultSettings; - - } - -} diff --git a/breezesettingsprovider.h b/breezesettingsprovider.h deleted file mode 100644 index 25e0257..0000000 --- a/breezesettingsprovider.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef breezesettingsprovider_h -#define breezesettingsprovider_h -/* - * Copyright 2014 Hugo Pereira Da Costa - * - * 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 (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * 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 . - */ - -#include "breezedecoration.h" -#include "breezesettings.h" -#include "breeze.h" - -#include - -#include - -namespace Breeze -{ - - class SettingsProvider: public QObject - { - - Q_OBJECT - - public: - - //* destructor - ~SettingsProvider(); - - //* singleton - static SettingsProvider *self(); - - //* internal settings for given decoration - InternalSettingsPtr internalSettings(Decoration *) const; - - public Q_SLOTS: - - //* reconfigure - void reconfigure(); - - private: - - //* contructor - SettingsProvider(); - - //* default configuration - InternalSettingsPtr m_defaultSettings; - - //* exceptions - InternalSettingsList m_exceptions; - - //* config object - KSharedConfigPtr m_config; - - //* singleton - static SettingsProvider *s_self; - - }; - -} - -#endif diff --git a/breezesizegrip.cpp b/breezesizegrip.cpp deleted file mode 100644 index 37060bc..0000000 --- a/breezesizegrip.cpp +++ /dev/null @@ -1,303 +0,0 @@ -/************************************************************************* - * Copyright (C) 2014 by Hugo Pereira Da Costa * - * * - * 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 * - * (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, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * - *************************************************************************/ - - -#include "breezesizegrip.h" - -#include - -#include -#include -#include - -#if BREEZE_HAVE_X11 -#include -#endif - -namespace Breeze -{ - - //* scoped pointer convenience typedef - template using ScopedPointer = QScopedPointer; - - //_____________________________________________ - SizeGrip::SizeGrip( Decoration* decoration ):QWidget(nullptr) - ,m_decoration( decoration ) - { - - setAttribute(Qt::WA_NoSystemBackground ); - setAutoFillBackground( false ); - - // cursor - setCursor( Qt::SizeFDiagCursor ); - - // size - setFixedSize( QSize( GripSize, GripSize ) ); - - // mask - setMask( QRegion( QVector{ - QPoint( 0, GripSize ), - QPoint( GripSize, 0 ), - QPoint( GripSize, GripSize ), - QPoint( 0, GripSize )} ) ); - - // embed - embed(); - updatePosition(); - - // connections - auto c = decoration->client().data(); - connect( c, &KDecoration2::DecoratedClient::widthChanged, this, &SizeGrip::updatePosition ); - connect( c, &KDecoration2::DecoratedClient::heightChanged, this, &SizeGrip::updatePosition ); - connect( c, &KDecoration2::DecoratedClient::activeChanged, this, &SizeGrip::updateActiveState ); - - // show - show(); - - } - - //_____________________________________________ - SizeGrip::~SizeGrip() - {} - - //_____________________________________________ - void SizeGrip::updateActiveState() - { - #if BREEZE_HAVE_X11 - if( QX11Info::isPlatformX11() ) - { - const quint32 value = XCB_STACK_MODE_ABOVE; - xcb_configure_window( QX11Info::connection(), winId(), XCB_CONFIG_WINDOW_STACK_MODE, &value ); - xcb_map_window( QX11Info::connection(), winId() ); - } - #endif - - update(); - - } - - //_____________________________________________ - void SizeGrip::embed() - { - - #if BREEZE_HAVE_X11 - - if( !QX11Info::isPlatformX11() ) return; - auto c = m_decoration.data()->client().data(); - - xcb_window_t windowId = c->windowId(); - if( windowId ) - { - - /* - find client's parent - we want the size grip to be at the same level as the client in the stack - */ - xcb_window_t current = windowId; - auto connection = QX11Info::connection(); - xcb_query_tree_cookie_t cookie = xcb_query_tree_unchecked( connection, current ); - ScopedPointer tree(xcb_query_tree_reply( connection, cookie, nullptr ) ); - if( !tree.isNull() && tree->parent ) current = tree->parent; - - // reparent - xcb_reparent_window( connection, winId(), current, 0, 0 ); - setWindowTitle( "Breeze::SizeGrip" ); - - } else { - - hide(); - - } - - #endif - } - - //_____________________________________________ - void SizeGrip::paintEvent( QPaintEvent* ) - { - - if( !m_decoration ) return; - - // get relevant colors - const QColor backgroundColor( m_decoration.data()->titleBarColor() ); - - // create and configure painter - QPainter painter(this); - painter.setRenderHints(QPainter::Antialiasing ); - - painter.setPen( Qt::NoPen ); - painter.setBrush( backgroundColor ); - - // polygon - painter.drawPolygon( QVector { - QPoint( 0, GripSize ), - QPoint( GripSize, 0 ), - QPoint( GripSize, GripSize ), - QPoint( 0, GripSize )} ); - } - - //_____________________________________________ - void SizeGrip::mousePressEvent( QMouseEvent* event ) - { - - switch (event->button()) - { - - case Qt::RightButton: - { - hide(); - QTimer::singleShot(5000, this, SLOT(show())); - break; - } - - case Qt::MidButton: - { - hide(); - break; - } - - case Qt::LeftButton: - if( rect().contains( event->pos() ) ) - { sendMoveResizeEvent( event->pos() ); } - break; - - default: break; - - } - - - } - - //_______________________________________________________________________________ - void SizeGrip::updatePosition() - { - - #if BREEZE_HAVE_X11 - if( !QX11Info::isPlatformX11() ) return; - - auto c = m_decoration.data()->client().data(); - QPoint position( - c->width() - GripSize - Offset, - c->height() - GripSize - Offset ); - - quint32 values[2] = { quint32(position.x()), quint32(position.y()) }; - xcb_configure_window( QX11Info::connection(), winId(), XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y, values ); - #endif - - } - - //_____________________________________________ - void SizeGrip::sendMoveResizeEvent( QPoint position ) - { - - #if BREEZE_HAVE_X11 - if( !QX11Info::isPlatformX11() ) return; - - // pointer to connection - auto connection( QX11Info::connection() ); - - // client - auto c = m_decoration.data()->client().data(); - - /* - get root position matching position - need to use xcb because the embedding of the widget - breaks QT's mapToGlobal and other methods - */ - QPoint rootPosition( position ); - xcb_get_geometry_cookie_t cookie( xcb_get_geometry( connection, winId() ) ); - ScopedPointer reply( xcb_get_geometry_reply( connection, cookie, nullptr ) ); - if( reply ) - { - - // translate coordinates - xcb_translate_coordinates_cookie_t coordCookie( xcb_translate_coordinates( - connection, winId(), reply.data()->root, - -reply.data()->border_width, - -reply.data()->border_width ) ); - - ScopedPointer< xcb_translate_coordinates_reply_t> coordReply( xcb_translate_coordinates_reply( connection, coordCookie, nullptr ) ); - - if( coordReply ) - { - rootPosition.rx() += coordReply.data()->dst_x; - rootPosition.ry() += coordReply.data()->dst_y; - } - - } - - // move/resize atom - if( !m_moveResizeAtom ) - { - - // create atom if not found - const QString atomName( "_NET_WM_MOVERESIZE" ); - xcb_intern_atom_cookie_t cookie( xcb_intern_atom( connection, false, atomName.size(), qPrintable( atomName ) ) ); - ScopedPointer reply( xcb_intern_atom_reply( connection, cookie, nullptr ) ); - m_moveResizeAtom = reply ? reply->atom:0; - - } - - if( !m_moveResizeAtom ) return; - - // button release event - xcb_button_release_event_t releaseEvent; - memset(&releaseEvent, 0, sizeof(releaseEvent)); - - releaseEvent.response_type = XCB_BUTTON_RELEASE; - releaseEvent.event = winId(); - releaseEvent.child = XCB_WINDOW_NONE; - releaseEvent.root = QX11Info::appRootWindow(); - releaseEvent.event_x = position.x(); - releaseEvent.event_y = position.y(); - releaseEvent.root_x = rootPosition.x(); - releaseEvent.root_y = rootPosition.y(); - releaseEvent.detail = XCB_BUTTON_INDEX_1; - releaseEvent.state = XCB_BUTTON_MASK_1; - releaseEvent.time = XCB_CURRENT_TIME; - releaseEvent.same_screen = true; - xcb_send_event( connection, false, winId(), XCB_EVENT_MASK_BUTTON_RELEASE, reinterpret_cast(&releaseEvent)); - - xcb_ungrab_pointer( connection, XCB_TIME_CURRENT_TIME ); - - // move resize event - xcb_client_message_event_t clientMessageEvent; - memset(&clientMessageEvent, 0, sizeof(clientMessageEvent)); - - clientMessageEvent.response_type = XCB_CLIENT_MESSAGE; - clientMessageEvent.type = m_moveResizeAtom; - clientMessageEvent.format = 32; - clientMessageEvent.window = c->windowId(); - clientMessageEvent.data.data32[0] = rootPosition.x(); - clientMessageEvent.data.data32[1] = rootPosition.y(); - clientMessageEvent.data.data32[2] = 4; // bottom right - clientMessageEvent.data.data32[3] = Qt::LeftButton; - clientMessageEvent.data.data32[4] = 0; - - xcb_send_event( connection, false, QX11Info::appRootWindow(), - XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | - XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, - reinterpret_cast(&clientMessageEvent) ); - - xcb_flush( connection ); - #endif - - } - -} diff --git a/breezesizegrip.h b/breezesizegrip.h deleted file mode 100644 index b240d90..0000000 --- a/breezesizegrip.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef breezesizegrip_h -#define breezesizegrip_h - -/************************************************************************* - * Copyright (C) 2014 by Hugo Pereira Da Costa * - * * - * 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 * - * (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, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * - *************************************************************************/ - -#include "breezedecoration.h" -#include "config-breeze.h" - -#include -#include -#include -#include - -#if BREEZE_HAVE_X11 -#include -#endif - -namespace Breeze -{ - - //* implements size grip for all widgets - class SizeGrip: public QWidget - { - - Q_OBJECT - - public: - - //* constructor - explicit SizeGrip( Decoration* ); - - //* constructor - virtual ~SizeGrip(); - - protected Q_SLOTS: - - //* update background color - void updateActiveState(); - - //* update position - void updatePosition(); - - //* embed into parent widget - void embed(); - - protected: - - //*@name event handlers - //@{ - - //* paint - virtual void paintEvent( QPaintEvent* ) override; - - //* mouse press - virtual void mousePressEvent( QMouseEvent* ) override; - - //@} - - private: - - //* send resize event - void sendMoveResizeEvent( QPoint ); - - //* grip size - enum { - Offset = 0, - GripSize = 14 - }; - - //* decoration - QPointer m_decoration; - - //* move/resize atom - #if BREEZE_HAVE_X11 - xcb_atom_t m_moveResizeAtom = 0; - #endif - - }; - - -} - -#endif diff --git a/cmake/Modules/FindFFTW.cmake b/cmake/Modules/FindFFTW.cmake deleted file mode 100644 index c321437..0000000 --- a/cmake/Modules/FindFFTW.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# Find the FFTW library -# -# Usage: -# find_package(FFTW [REQUIRED]) -# -# It sets the following variables: -# FFTW_FOUND -# FFTW_INCLUDES -# FFTW_LIBRARIES - - -find_path(FFTW_INCLUDES fftw3.h) - -find_library(FFTW_LIBRARIES NAMES fftw3) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FFTW DEFAULT_MSG - FFTW_INCLUDES FFTW_LIBRARIES) - -mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES) diff --git a/config-breeze.h.cmake b/config-breeze.h.cmake deleted file mode 100644 index bee0f79..0000000 --- a/config-breeze.h.cmake +++ /dev/null @@ -1,28 +0,0 @@ -/* config-breeze.h. Generated by cmake from config-breeze.h.cmake */ - -/************************************************************************* - * Copyright (C) 2014 by Hugo Pereira Da Costa * - * * - * 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 * - * (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, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * - *************************************************************************/ - -#ifndef config_breeze_h -#define config_breeze_h - -/* Define to 1 if XCB libraries are found */ -#cmakedefine01 BREEZE_HAVE_X11 - -#endif diff --git a/config/breeze10config.desktop b/config/breeze10config.desktop deleted file mode 100644 index cdaaae4..0000000 --- a/config/breeze10config.desktop +++ /dev/null @@ -1,15 +0,0 @@ -[Desktop Entry] -Exec=kcmshell5 breeze10config -Icon=preferences-system-windows -Type=Service -X-KDE-ServiceTypes=KCModule - -X-KDE-Library=org.kde.kdecoration2/breeze10 -X-KDE-PluginKeyword=kcmodule -X-KDE-ParentApp=kcontrol -X-KDE-Weight=60 -X-KDE-PluginInfo-Name=Breeze10 - -Name=Breeze10 -Comment=Modify the appearance of window decorations -X-KDE-Keywords=breeze10,decoration diff --git a/config/breezeconfigwidget.cpp b/config/breezeconfigwidget.cpp deleted file mode 100644 index 4c1469c..0000000 --- a/config/breezeconfigwidget.cpp +++ /dev/null @@ -1,323 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// breezeconfigurationui.cpp -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezeconfigwidget.h" -#include "breezeexceptionlist.h" -#include "breezesettings.h" - -#include - -#include -#include - -namespace Breeze -{ - - //_________________________________________________________ - ConfigWidget::ConfigWidget( QWidget* parent, const QVariantList &args ): - KCModule(parent, args), - m_configuration( KSharedConfig::openConfig( QStringLiteral( "breezerc" ) ) ), - m_changed( false ) - { - - // configuration - m_ui.setupUi( this ); - - // track ui changes - connect( m_ui.titleAlignment, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); - connect( m_ui.buttonSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); - connect( m_ui.drawBorderOnMaximizedWindows, SIGNAL(clicked()), SLOT(updateChanged()) ); - connect( m_ui.drawSizeGrip, SIGNAL(clicked()), SLOT(updateChanged()) ); - connect( m_ui.opacitySpinBox, QOverload::of(&QSpinBox::valueChanged), [=](int /*i*/){updateChanged();} ); - - connect( m_ui.fontComboBox, &QFontComboBox::currentFontChanged, [this] { updateChanged(); } ); - connect( m_ui.fontSizeSpinBox, QOverload::of(&QSpinBox::valueChanged), [=](int /*i*/){updateChanged();} ); - connect(m_ui.weightComboBox, QOverload::of(&QComboBox::currentIndexChanged), [this] { updateChanged(); } ); - connect( m_ui.italicCheckBox, &QCheckBox::stateChanged, [this] { updateChanged(); } ); - - // track animations changes - connect( m_ui.animationsEnabled, SIGNAL(clicked()), SLOT(updateChanged()) ); - connect( m_ui.animationsDuration, SIGNAL(valueChanged(int)), SLOT(updateChanged()) ); - - // track shadows changes - connect( m_ui.shadowSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); - connect( m_ui.shadowStrength, SIGNAL(valueChanged(int)), SLOT(updateChanged()) ); - connect( m_ui.shadowColor, SIGNAL(changed(QColor)), SLOT(updateChanged()) ); - - // track exception changes - connect( m_ui.exceptions, SIGNAL(changed(bool)), SLOT(updateChanged()) ); - - } - - //_________________________________________________________ - void ConfigWidget::load() - { - - // create internal settings and load from rc files - m_internalSettings = InternalSettingsPtr( new InternalSettings() ); - m_internalSettings->load(); - - // assign to ui - m_ui.titleAlignment->setCurrentIndex( m_internalSettings->titleAlignment() ); - m_ui.buttonSize->setCurrentIndex( m_internalSettings->buttonSize() ); - m_ui.drawBorderOnMaximizedWindows->setChecked( m_internalSettings->drawBorderOnMaximizedWindows() ); - m_ui.drawSizeGrip->setChecked( m_internalSettings->drawSizeGrip() ); - m_ui.animationsEnabled->setChecked( m_internalSettings->animationsEnabled() ); - m_ui.animationsDuration->setValue( m_internalSettings->animationsDuration() ); - m_ui.opacitySpinBox->setValue( m_internalSettings->backgroundOpacity() ); - - QString fontStr = m_internalSettings->titleBarFont(); - if (fontStr.isEmpty()) - fontStr = QLatin1String("Sans,11,-1,5,50,0,0,0,0,0"); - QFont f; f.fromString( fontStr ); - m_ui.fontComboBox->setCurrentFont( f ); - m_ui.fontSizeSpinBox->setValue( f.pointSize() ); - int w = f.weight(); - switch (w) { - case QFont::Medium: - m_ui.weightComboBox->setCurrentIndex(1); - break; - case QFont::DemiBold: - m_ui.weightComboBox->setCurrentIndex(2); - break; - case QFont::Bold: - m_ui.weightComboBox->setCurrentIndex(3); - break; - case QFont::ExtraBold: - m_ui.weightComboBox->setCurrentIndex(4); - break; - case QFont::Black: - m_ui.weightComboBox->setCurrentIndex(5); - break; - default: - m_ui.weightComboBox->setCurrentIndex(0); - break; - } - m_ui.italicCheckBox->setChecked( f.italic() ); - - // load shadows - if( m_internalSettings->shadowSize() <= InternalSettings::ShadowVeryLarge ) m_ui.shadowSize->setCurrentIndex( m_internalSettings->shadowSize() ); - else m_ui.shadowSize->setCurrentIndex( InternalSettings::ShadowLarge ); - - m_ui.shadowStrength->setValue( qRound(qreal(m_internalSettings->shadowStrength()*100)/255 ) ); - m_ui.shadowColor->setColor( m_internalSettings->shadowColor() ); - - // load exceptions - ExceptionList exceptions; - exceptions.readConfig( m_configuration ); - m_ui.exceptions->setExceptions( exceptions.get() ); - setChanged( false ); - - } - - //_________________________________________________________ - void ConfigWidget::save() - { - - // create internal settings and load from rc files - m_internalSettings = InternalSettingsPtr( new InternalSettings() ); - m_internalSettings->load(); - - // apply modifications from ui - m_internalSettings->setTitleAlignment( m_ui.titleAlignment->currentIndex() ); - m_internalSettings->setButtonSize( m_ui.buttonSize->currentIndex() ); - m_internalSettings->setDrawBorderOnMaximizedWindows( m_ui.drawBorderOnMaximizedWindows->isChecked() ); - m_internalSettings->setDrawSizeGrip( m_ui.drawSizeGrip->isChecked() ); - m_internalSettings->setAnimationsEnabled( m_ui.animationsEnabled->isChecked() ); - m_internalSettings->setAnimationsDuration( m_ui.animationsDuration->value() ); - m_internalSettings->setBackgroundOpacity(m_ui.opacitySpinBox->value()); - - QFont f = m_ui.fontComboBox->currentFont(); - f.setPointSize(m_ui.fontSizeSpinBox->value()); - int indx = m_ui.weightComboBox->currentIndex(); - switch (indx) { - case 1: - f.setWeight(QFont::Medium); - break; - case 2: - f.setWeight(QFont::DemiBold); - break; - case 3: - f.setWeight(QFont::Bold); - break; - case 4: - f.setWeight(QFont::ExtraBold); - break; - case 5: - f.setWeight(QFont::Black); - break; - default: - f.setBold(false); - break; - } - f.setItalic(m_ui.italicCheckBox->isChecked()); - m_internalSettings->setTitleBarFont(f.toString()); - - m_internalSettings->setShadowSize( m_ui.shadowSize->currentIndex() ); - m_internalSettings->setShadowStrength( qRound( qreal(m_ui.shadowStrength->value()*255)/100 ) ); - m_internalSettings->setShadowColor( m_ui.shadowColor->color() ); - - // save configuration - m_internalSettings->save(); - - // get list of exceptions and write - InternalSettingsList exceptions( m_ui.exceptions->exceptions() ); - ExceptionList( exceptions ).writeConfig( m_configuration ); - - // sync configuration - m_configuration->sync(); - setChanged( false ); - - // needed to tell kwin to reload when running from external kcmshell - { - QDBusMessage message = QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig"); - QDBusConnection::sessionBus().send(message); - } - - // needed for breeze style to reload shadows - { - QDBusMessage message( QDBusMessage::createSignal("/BreezeDecoration", "org.kde.Breeze.Style", "reparseConfiguration") ); - QDBusConnection::sessionBus().send(message); - } - - } - - //_________________________________________________________ - void ConfigWidget::defaults() - { - - // create internal settings and load from rc files - m_internalSettings = InternalSettingsPtr( new InternalSettings() ); - m_internalSettings->setDefaults(); - - // assign to ui - m_ui.titleAlignment->setCurrentIndex( m_internalSettings->titleAlignment() ); - m_ui.buttonSize->setCurrentIndex( m_internalSettings->buttonSize() ); - m_ui.drawBorderOnMaximizedWindows->setChecked( m_internalSettings->drawBorderOnMaximizedWindows() ); - m_ui.drawSizeGrip->setChecked( m_internalSettings->drawSizeGrip() ); - m_ui.animationsEnabled->setChecked( m_internalSettings->animationsEnabled() ); - m_ui.animationsDuration->setValue( m_internalSettings->animationsDuration() ); - m_ui.opacitySpinBox->setValue( m_internalSettings->backgroundOpacity() ); - - QFont f; f.fromString("Sans,11,-1,5,50,0,0,0,0,0"); - m_ui.fontComboBox->setCurrentFont( f ); - m_ui.fontSizeSpinBox->setValue( f.pointSize() ); - int w = f.weight(); - switch (w) { - case QFont::Medium: - m_ui.weightComboBox->setCurrentIndex(1); - break; - case QFont::DemiBold: - m_ui.weightComboBox->setCurrentIndex(2); - break; - case QFont::Bold: - m_ui.weightComboBox->setCurrentIndex(3); - break; - case QFont::ExtraBold: - m_ui.weightComboBox->setCurrentIndex(4); - break; - case QFont::Black: - m_ui.weightComboBox->setCurrentIndex(5); - break; - default: - m_ui.weightComboBox->setCurrentIndex(0); - break; - } - m_ui.italicCheckBox->setChecked( f.italic() ); - - m_ui.shadowSize->setCurrentIndex( m_internalSettings->shadowSize() ); - m_ui.shadowStrength->setValue( qRound(qreal(m_internalSettings->shadowStrength()*100)/255 ) ); - m_ui.shadowColor->setColor( m_internalSettings->shadowColor() ); - - } - - //_______________________________________________ - void ConfigWidget::updateChanged() - { - - // check configuration - if( !m_internalSettings ) return; - - // track modifications - bool modified( false ); - QFont f; f.fromString( m_internalSettings->titleBarFont() ); - - if( m_ui.titleAlignment->currentIndex() != m_internalSettings->titleAlignment() ) modified = true; - else if( m_ui.buttonSize->currentIndex() != m_internalSettings->buttonSize() ) modified = true; - else if( m_ui.drawBorderOnMaximizedWindows->isChecked() != m_internalSettings->drawBorderOnMaximizedWindows() ) modified = true; - else if( m_ui.drawSizeGrip->isChecked() != m_internalSettings->drawSizeGrip() ) modified = true; - else if( m_ui.opacitySpinBox->value() != m_internalSettings->backgroundOpacity() ) modified = true; - - // font (also see below) - else if( m_ui.fontComboBox->currentFont().toString() != f.family() ) modified = true; - else if( m_ui.fontSizeSpinBox->value() != f.pointSize() ) modified = true; - else if( m_ui.italicCheckBox->isChecked() != f.italic() ) modified = true; - - // animations - else if( m_ui.animationsEnabled->isChecked() != m_internalSettings->animationsEnabled() ) modified = true; - else if( m_ui.animationsDuration->value() != m_internalSettings->animationsDuration() ) modified = true; - - // shadows - else if( m_ui.shadowSize->currentIndex() != m_internalSettings->shadowSize() ) modified = true; - else if( qRound( qreal(m_ui.shadowStrength->value()*255)/100 ) != m_internalSettings->shadowStrength() ) modified = true; - else if( m_ui.shadowColor->color() != m_internalSettings->shadowColor() ) modified = true; - - // exceptions - else if( m_ui.exceptions->isChanged() ) modified = true; - else { - int indx = m_ui.weightComboBox->currentIndex(); - switch (indx) { - case 1: - if (f.weight() != QFont::Medium) modified = true; - break; - case 2: - if (f.weight() != QFont::DemiBold) modified = true; - break; - case 3: - if (f.weight() != QFont::Bold) modified = true; - break; - case 4: - if (f.weight() != QFont::ExtraBold) modified = true; - break; - case 5: - if (f.weight() != QFont::Black) modified = true; - break; - default: - if (f.bold()) modified = true; - break; - } - } - - setChanged( modified ); - - } - - //_______________________________________________ - void ConfigWidget::setChanged( bool value ) - { - emit changed( value ); - } - -} diff --git a/config/breezeconfigwidget.h b/config/breezeconfigwidget.h deleted file mode 100644 index a2fc6d1..0000000 --- a/config/breezeconfigwidget.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef breezeconfigwidget_h -#define breezeconfigwidget_h -////////////////////////////////////////////////////////////////////////////// -// breezeconfigurationui.h -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "ui_breezeconfigurationui.h" -#include "breezeexceptionlistwidget.h" -#include "breezesettings.h" -#include "breeze.h" - -#include -#include - -#include -#include - -namespace Breeze -{ - - //_____________________________________________ - class ConfigWidget: public KCModule - { - - Q_OBJECT - - public: - - //* constructor - explicit ConfigWidget( QWidget*, const QVariantList& ); - - //* destructor - virtual ~ConfigWidget() = default; - - //* default - void defaults() override; - - //* load configuration - void load() override; - - //* save configuration - void save() override; - - protected Q_SLOTS: - - //* update changed state - virtual void updateChanged(); - - protected: - - //* set changed state - void setChanged( bool ); - - private: - - //* ui - Ui_BreezeConfigurationUI m_ui; - - //* kconfiguration object - KSharedConfig::Ptr m_configuration; - - //* internal exception - InternalSettingsPtr m_internalSettings; - - //* changed state - bool m_changed; - - }; - -} - -#endif diff --git a/config/breezedecorationconfig.desktop b/config/breezedecorationconfig.desktop deleted file mode 100644 index 6cf991a..0000000 --- a/config/breezedecorationconfig.desktop +++ /dev/null @@ -1,131 +0,0 @@ -[Desktop Entry] -Exec=kcmshell5 breezedecorationconfig -Icon=preferences-system-windows -Type=Service -X-KDE-ServiceTypes=KCModule - -X-KDE-Library=org.kde.kdecoration2/breezedecoration -X-KDE-PluginKeyword=kcmodule -X-KDE-ParentApp=kcontrol -X-KDE-Weight=60 - -Name=Breeze Window Decoration -Name[ca]=Decoració de les finestres Brisa -Name[ca@valencia]=Decoració de les finestres Brisa -Name[cs]=Dekorace oken Breeze -Name[da]=Breeze vinduesdekoration -Name[de]=Breeze-Fensterdekoration -Name[el]=Διακοσμήσεις παραθύρου Breeze -Name[en_GB]=Breeze Window Decoration -Name[es]=Decoración de ventanas Brisa -Name[eu]=Breeze leihoen apaindura -Name[fi]=Breeze-ikkunankehys -Name[fr]=Décoration de fenêtre Brise -Name[gl]=Decoración de xanela de Breeze -Name[hu]=Breeze ablakdekoráció -Name[ia]=Decoration de fenestra Breeze -Name[id]=Dekorasi Jendela Breeze -Name[it]=Decorazione delle finestre di Brezza -Name[ko]=Breeze 창 장식 -Name[nl]=Breeze vensterdecoratie -Name[nn]=Breeze-vindaugsdekorasjon -Name[pl]=Wygląd okien Bryzy -Name[pt]=Decoração de Janelas Brisa -Name[pt_BR]=Decorações da janela Breeze -Name[ru]=Оформление окон Breeze -Name[sk]=Dekorácie okien Breeze -Name[sl]=Okraski oken Sapica -Name[sr]=Поветарчева декорација прозора -Name[sr@ijekavian]=Поветарчева декорација прозора -Name[sr@ijekavianlatin]=Povetarčeva dekoracija prozora -Name[sr@latin]=Povetarčeva dekoracija prozora -Name[sv]=Breeze fönsterdekoration -Name[tr]=Breeze Pencere Dekorasyonu -Name[uk]=Декорації вікон Breeze -Name[x-test]=xxBreeze Window Decorationxx -Name[zh_CN]=微风窗口装饰 -Name[zh_TW]=Breeze 視窗裝飾 -Comment=Modify the appearance of window decorations -Comment[ar]=عدّل مظهر زخرفات النّوافذ -Comment[ca]=Modifica l'aparença de les decoracions de les finestres -Comment[ca@valencia]=Modifica l'aparença de les decoracions de les finestres -Comment[cs]=Změnit vzhled dekorace oken -Comment[da]=Ændr vinduesdekorationers udseende -Comment[de]=Das Erscheinungsbild der Fensterdekorationen ändern -Comment[el]=Τροποποίηση εμφάνισης της διακόσμησης παραθύρου -Comment[en_GB]=Modify the appearance of window decorations -Comment[es]=Modificar el aspecto de las decoraciones de las ventanas -Comment[et]=Akna dekoratsioonide välimuse muutmine -Comment[eu]=Aldatu leiho apainduren itxura -Comment[fi]=Muuta ikkunoiden kehysten ulkoasua -Comment[fr]=Modifier l'apparence des décorations des fenêtres -Comment[gl]=Modifica a aparencia da decoración da xanela -Comment[he]=התאם את מראה מסגרות החלונות -Comment[hu]=Az ablakdekorációk megjelenésének módosítása -Comment[ia]=Modifica le apparentia de decorationes de fenestra -Comment[id]=Memodofikasi penampilan dekorasi jendela -Comment[it]=Modifica l'aspetto delle decorazioni delle finestre -Comment[ko]=창 장식의 모습을 수정합니다 -Comment[lt]=Keisti lango dekoracijų išvaizdą -Comment[nb]=Endre utseende for vindusdekorasjoner -Comment[nl]=Wijzig het uiterlijk van vensterdecoraties -Comment[nn]=Endra utsjånad på vindaugspynt -Comment[pl]=Zmień wygląd i wystrój okien -Comment[pt]=Modificar a aparência das decorações das janelas -Comment[pt_BR]=Modifica a aparência das decorações da janela -Comment[ro]=Modifică aspectul decorațiilor pentru ferestre -Comment[ru]=Настройка заголовков окон в стиле Breeze -Comment[sk]=Zmena vzhľadu dekorácie okien -Comment[sl]=Spremenite videz okraskov oken -Comment[sr]=Измените изглед декорација прозора -Comment[sr@ijekavian]=Измијените изглед декорација прозора -Comment[sr@ijekavianlatin]=Izmijenite izgled dekoracija prozora -Comment[sr@latin]=Izmenite izgled dekoracija prozora -Comment[sv]=Ändra utseendet hos fönsterdekorationer -Comment[tr]=Pencere dekorasyonlarının görünümünü değiştir -Comment[uk]=Зміна вигляду декорацій вікон -Comment[x-test]=xxModify the appearance of window decorationsxx -Comment[zh_CN]=修改窗口装饰外观 -Comment[zh_TW]=變更視窗裝飾外觀 -X-KDE-Keywords=breeze,decoration -X-KDE-Keywords[ar]=نسيم,زخرفة -X-KDE-Keywords[ca]=breeze,brisa,decoració -X-KDE-Keywords[ca@valencia]=breeze,brisa,decoració -X-KDE-Keywords[cs]=breeze,dekorace -X-KDE-Keywords[da]=breeze,dekoration -X-KDE-Keywords[de]=Breeze-Dekoration -X-KDE-Keywords[el]=breeze,διακόσμηση -X-KDE-Keywords[en_GB]=breeze,decoration -X-KDE-Keywords[es]=breeze,brisa,decoración -X-KDE-Keywords[et]=breeze,dekoratsioon -X-KDE-Keywords[eu]=breeze,apainketa,apaindura -X-KDE-Keywords[fi]=breeze,decoration,kehys,koriste,koristus,ikkunakehys -X-KDE-Keywords[fr]=breeze,décoration -X-KDE-Keywords[gl]=breeze,decoración -X-KDE-Keywords[he]=breeze,decoration,מסגרת -X-KDE-Keywords[hu]=breeze,dekoráció -X-KDE-Keywords[ia]=breeze,decoration -X-KDE-Keywords[id]=breeze,dekorasi -X-KDE-Keywords[it]=brezza,decorazione -X-KDE-Keywords[ko]=breeze,decoration,장식 -X-KDE-Keywords[lt]=breeze,kekoracija -X-KDE-Keywords[nb]=beeze,dekorasjon -X-KDE-Keywords[nl]=breeze,decoratie -X-KDE-Keywords[nn]=breeze,dekorasjonar,pynt -X-KDE-Keywords[pl]=breeze,dekoracja,bryza,wystrój -X-KDE-Keywords[pt]=brisa,decoração -X-KDE-Keywords[pt_BR]=breeze,decoração -X-KDE-Keywords[ro]=briză,breeze,decorare,decorație -X-KDE-Keywords[ru]=breeze,бриз,decoration,декорации окон,оформление окон -X-KDE-Keywords[sk]=breeze,dekorácia -X-KDE-Keywords[sl]=sapica,okraski -X-KDE-Keywords[sr]=breeze,decoration,Поветарац,декорација -X-KDE-Keywords[sr@ijekavian]=breeze,decoration,Поветарац,декорација -X-KDE-Keywords[sr@ijekavianlatin]=breeze,decoration,Povetarac,dekoracija -X-KDE-Keywords[sr@latin]=breeze,decoration,Povetarac,dekoracija -X-KDE-Keywords[sv]=breeze,dekoration -X-KDE-Keywords[tr]=esinti,dekorasyon -X-KDE-Keywords[uk]=breeze,decoration,бриз,декорації,декорація,обрамлення -X-KDE-Keywords[x-test]=xxbreezexx,xxdecorationxx -X-KDE-Keywords[zh_CN]=breeze,decoration,微风,装饰 -X-KDE-Keywords[zh_TW]=breeze,decoration diff --git a/config/breezedetectwidget.cpp b/config/breezedetectwidget.cpp deleted file mode 100644 index 7c52088..0000000 --- a/config/breezedetectwidget.cpp +++ /dev/null @@ -1,182 +0,0 @@ - -////////////////////////////////////////////////////////////////////////////// -// breezedetectwidget.cpp -// Note: this class is a stripped down version of -// /kdebase/workspace/kwin/kcmkwin/kwinrules/detectwidget.cpp -// Copyright (c) 2004 Lubos Lunak -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezedetectwidget.h" - -#include "breeze.h" - -#include - -#include -#include -#include -#if BREEZE_HAVE_X11 -#include -#include -#endif - -namespace Breeze -{ - - //_________________________________________________________ - DetectDialog::DetectDialog( QWidget* parent ): - QDialog( parent ) - { - - // setup - m_ui.setupUi( this ); - - connect( m_ui.buttonBox->button( QDialogButtonBox::Cancel ), SIGNAL(clicked()), this, SLOT(close()) ); - m_ui.windowClassCheckBox->setChecked( true ); - -#if BREEZE_HAVE_X11 - if (QX11Info::isPlatformX11()) { - // create atom - xcb_connection_t* connection( QX11Info::connection() ); - const QString atomName( QStringLiteral( "WM_STATE" ) ); - xcb_intern_atom_cookie_t cookie( xcb_intern_atom( connection, false, atomName.size(), qPrintable( atomName ) ) ); - QScopedPointer reply( xcb_intern_atom_reply( connection, cookie, nullptr) ); - m_wmStateAtom = reply ? reply->atom : 0; - } -#endif - - } - - //_________________________________________________________ - void DetectDialog::detect( WId window ) - { - if( window == 0 ) selectWindow(); - else readWindow( window ); - } - - //_________________________________________________________ - void DetectDialog::readWindow( WId window ) - { - - if( window == 0 ) - { - emit detectionDone( false ); - return; - } - - m_info.reset(new KWindowInfo( window, NET::WMAllProperties, NET::WM2AllProperties )); - if( !m_info->valid()) - { - emit detectionDone( false ); - return; - } - - const QString wmClassClass( QString::fromUtf8( m_info->windowClassClass() ) ); - const QString wmClassName( QString::fromUtf8( m_info->windowClassName() ) ); - - m_ui.windowClass->setText( QStringLiteral( "%1 (%2 %3)" ).arg( wmClassClass ).arg( wmClassName ).arg( wmClassClass ) ); - m_ui.windowTitle->setText( m_info->name() ); - emit detectionDone( exec() == QDialog::Accepted ); - - } - - //_________________________________________________________ - void DetectDialog::selectWindow() - { - - // use a dialog, so that all user input is blocked - // use WX11BypassWM and moving away so that it's not actually visible - // grab only mouse, so that keyboard can be used e.g. for switching windows - m_grabber = new QDialog( nullptr, Qt::X11BypassWindowManagerHint ); - m_grabber->move( -1000, -1000 ); - m_grabber->setModal( true ); - m_grabber->show(); - - // need to explicitly override cursor for Qt5 - qApp->setOverrideCursor( Qt::CrossCursor ); - m_grabber->grabMouse( Qt::CrossCursor ); - m_grabber->installEventFilter( this ); - - } - - //_________________________________________________________ - bool DetectDialog::eventFilter( QObject* o, QEvent* e ) - { - // check object and event type - if( o != m_grabber ) return false; - if( e->type() != QEvent::MouseButtonRelease ) return false; - - // need to explicitely release cursor for Qt5 - qApp->restoreOverrideCursor(); - - // delete old m_grabber - delete m_grabber; - m_grabber = nullptr; - - // check button - if( static_cast< QMouseEvent* >( e )->button() != Qt::LeftButton ) return true; - - // read window information - readWindow( findWindow() ); - - return true; - } - - //_________________________________________________________ - WId DetectDialog::findWindow() - { - - #if BREEZE_HAVE_X11 - if (!QX11Info::isPlatformX11()) { - return 0; - } - // check atom - if( !m_wmStateAtom ) return 0; - - xcb_connection_t* connection( QX11Info::connection() ); - xcb_window_t parent( QX11Info::appRootWindow() ); - - // why is there a loop of only 10 here - for( int i = 0; i < 10; ++i ) - { - - // query pointer - xcb_query_pointer_cookie_t pointerCookie( xcb_query_pointer( connection, parent ) ); - QScopedPointer pointerReply( xcb_query_pointer_reply( connection, pointerCookie, nullptr ) ); - if( !( pointerReply && pointerReply->child ) ) return 0; - - const xcb_window_t child( pointerReply->child ); - xcb_get_property_cookie_t cookie( xcb_get_property( connection, 0, child, m_wmStateAtom, XCB_GET_PROPERTY_TYPE_ANY, 0, 0 ) ); - QScopedPointer reply( xcb_get_property_reply( connection, cookie, nullptr ) ); - if( reply && reply->type ) return child; - else parent = child; - - } - #endif - - return 0; - - } - -} diff --git a/config/breezedetectwidget.h b/config/breezedetectwidget.h deleted file mode 100644 index 54e51da..0000000 --- a/config/breezedetectwidget.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef breezedetectwidget_h -#define breezedetectwidget_h - -////////////////////////////////////////////////////////////////////////////// -// breezedetectwidget.h -// Note: this class is a stripped down version of -// /kdebase/workspace/kwin/kcmkwin/kwinrules/detectwidget.h -// Copyright (c) 2004 Lubos Lunak - -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezesettings.h" -#include "ui_breezedetectwidget.h" - -#include -#include -#include -#include -#include - -#include - -namespace Breeze -{ - - class DetectDialog : public QDialog - { - - Q_OBJECT - - public: - - //* constructor - explicit DetectDialog( QWidget* ); - - //* read window properties or select one from mouse grab - void detect( WId window ); - - //* selected class - QByteArray selectedClass() const; - - //* window information - const KWindowInfo& windowInfo() const - { return *(m_info.data()); } - - //* exception type - InternalSettings::EnumExceptionType exceptionType() const - { - if( m_ui.windowClassCheckBox->isChecked() ) return InternalSettings::ExceptionWindowClassName; - else if( m_ui.windowTitleCheckBox->isChecked() ) return InternalSettings::ExceptionWindowTitle; - else return InternalSettings::ExceptionWindowClassName; - } - - Q_SIGNALS: - - void detectionDone( bool ); - - protected: - - bool eventFilter( QObject* o, QEvent* e ) override; - - private: - - //* select window from grab - void selectWindow(); - - //* read window properties - void readWindow( WId window ); - - //* find window under cursor - WId findWindow(); - - //* execute - void executeDialog(); - - //* ui - Ui::BreezeDetectWidget m_ui; - - //* invisible dialog used to grab mouse - QDialog* m_grabber = nullptr; - - //* current window information - QScopedPointer m_info; - - //* wm state atom - quint32 m_wmStateAtom = 0; - - }; - -} // namespace - -#endif diff --git a/config/breezeexceptiondialog.cpp b/config/breezeexceptiondialog.cpp deleted file mode 100644 index 33877e1..0000000 --- a/config/breezeexceptiondialog.cpp +++ /dev/null @@ -1,197 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// breezeexceptiondialog.cpp -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezeexceptiondialog.h" -#include "breezedetectwidget.h" -#include "config-breeze.h" - -#if BREEZE_HAVE_X11 -#include -#endif - -namespace Breeze -{ - - //___________________________________________ - ExceptionDialog::ExceptionDialog( QWidget* parent ): - QDialog( parent ) - { - - m_ui.setupUi( this ); - - connect( m_ui.buttonBox->button( QDialogButtonBox::Cancel ), SIGNAL(clicked()), this, SLOT(close()) ); - - // store checkboxes from ui into list - m_checkboxes.insert( BorderSize, m_ui.borderSizeCheckBox ); - - // detect window properties - connect( m_ui.detectDialogButton, SIGNAL(clicked()), SLOT(selectWindowProperties()) ); - - // connections - connect( m_ui.exceptionType, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); - connect( m_ui.exceptionEditor, SIGNAL(textChanged(QString)), SLOT(updateChanged()) ); - connect( m_ui.borderSizeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); - - for( CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter ) - { connect( iter.value(), SIGNAL(clicked()), SLOT(updateChanged()) ); } - - connect( m_ui.hideTitleBar, SIGNAL(clicked()), SLOT(updateChanged()) ); - connect( m_ui.opaqueTitleBar, SIGNAL(clicked()), SLOT(updateChanged()) ); - m_ui.opacityOverrideLabelSpinBox->setSpecialValueText(tr("None")); - connect( m_ui.opacityOverrideLabelSpinBox, QOverload::of(&QSpinBox::valueChanged), [=](int /*i*/){updateChanged();} ); - connect( m_ui.isDialog, SIGNAL(clicked()), SLOT(updateChanged()) ); - - // hide detection dialog on non X11 platforms - #if BREEZE_HAVE_X11 - if( !QX11Info::isPlatformX11() ) m_ui.detectDialogButton->hide(); - #else - m_ui.detectDialogButton->hide(); - #endif - } - - //___________________________________________ - void ExceptionDialog::setException( InternalSettingsPtr exception ) - { - - // store exception internally - m_exception = exception; - - // type - m_ui.exceptionType->setCurrentIndex(m_exception->exceptionType() ); - m_ui.exceptionEditor->setText( m_exception->exceptionPattern() ); - m_ui.borderSizeComboBox->setCurrentIndex( m_exception->borderSize() ); - m_ui.hideTitleBar->setChecked( m_exception->hideTitleBar() ); - m_ui.opaqueTitleBar->setChecked( m_exception->opaqueTitleBar() ); - m_ui.opacityOverrideLabelSpinBox->setValue( m_exception->opacityOverride() ); - m_ui.isDialog->setChecked( m_exception->isDialog() ); - - // mask - for( CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter ) - { iter.value()->setChecked( m_exception->mask() & iter.key() ); } - - setChanged( false ); - - } - - //___________________________________________ - void ExceptionDialog::save() - { - m_exception->setExceptionType( m_ui.exceptionType->currentIndex() ); - m_exception->setExceptionPattern( m_ui.exceptionEditor->text() ); - m_exception->setBorderSize( m_ui.borderSizeComboBox->currentIndex() ); - m_exception->setHideTitleBar( m_ui.hideTitleBar->isChecked() ); - m_exception->setOpaqueTitleBar( m_ui.opaqueTitleBar->isChecked() ); - m_exception->setOpacityOverride( m_ui.opacityOverrideLabelSpinBox->value() ); - m_exception->setIsDialog( m_ui.isDialog->isChecked() ); - - // mask - unsigned int mask = None; - for( CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter ) - { if( iter.value()->isChecked() ) mask |= iter.key(); } - - m_exception->setMask( mask ); - - setChanged( false ); - - } - - //___________________________________________ - void ExceptionDialog::updateChanged() - { - bool modified( false ); - if( m_exception->exceptionType() != m_ui.exceptionType->currentIndex() ) modified = true; - else if( m_exception->exceptionPattern() != m_ui.exceptionEditor->text() ) modified = true; - else if( m_exception->borderSize() != m_ui.borderSizeComboBox->currentIndex() ) modified = true; - else if( m_exception->hideTitleBar() != m_ui.hideTitleBar->isChecked() ) modified = true; - else if( m_exception->opaqueTitleBar() != m_ui.opaqueTitleBar->isChecked() ) modified = true; - else if( m_exception->opacityOverride() != m_ui.opacityOverrideLabelSpinBox->value() ) modified = true; - else if( m_exception->isDialog() != m_ui.isDialog->isChecked() ) modified = true; - else - { - // check mask - for( CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter ) - { - if( iter.value()->isChecked() != (bool)( m_exception->mask() & iter.key() ) ) - { - modified = true; - break; - } - } - } - - setChanged( modified ); - - } - - //___________________________________________ - void ExceptionDialog::selectWindowProperties() - { - - // create widget - if( !m_detectDialog ) - { - m_detectDialog = new DetectDialog( this ); - connect( m_detectDialog, SIGNAL(detectionDone(bool)), SLOT(readWindowProperties(bool)) ); - } - - m_detectDialog->detect(0); - - } - - //___________________________________________ - void ExceptionDialog::readWindowProperties( bool valid ) - { - Q_CHECK_PTR( m_detectDialog ); - if( valid ) - { - - // type - m_ui.exceptionType->setCurrentIndex( m_detectDialog->exceptionType() ); - - // window info - const KWindowInfo& info( m_detectDialog->windowInfo() ); - - switch( m_detectDialog->exceptionType() ) - { - - default: - case InternalSettings::ExceptionWindowClassName: - m_ui.exceptionEditor->setText( QString::fromUtf8( info.windowClassClass() ) ); - break; - - case InternalSettings::ExceptionWindowTitle: - m_ui.exceptionEditor->setText( info.name() ); - break; - - } - - } - - delete m_detectDialog; - m_detectDialog = nullptr; - - } - -} diff --git a/config/breezeexceptiondialog.h b/config/breezeexceptiondialog.h deleted file mode 100644 index 9846ff2..0000000 --- a/config/breezeexceptiondialog.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef breezeexceptiondialog_h -#define breezeexceptiondialog_h -////////////////////////////////////////////////////////////////////////////// -// breezeexceptiondialog.h -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "ui_breezeexceptiondialog.h" -#include "breeze.h" - -#include -#include - -namespace Breeze -{ - - class DetectDialog; - - //* breeze exceptions list - class ExceptionDialog: public QDialog - { - - Q_OBJECT - - public: - - //* constructor - explicit ExceptionDialog( QWidget* parent ); - - //* destructor - virtual ~ExceptionDialog() - {} - - //* set exception - void setException( InternalSettingsPtr ); - - //* save exception - void save(); - - //* true if changed - virtual bool isChanged() const - { return m_changed; } - - Q_SIGNALS: - - //* emmited when changed - void changed( bool ); - - protected: - - //* set changed state - virtual void setChanged( bool value ) - { - m_changed = value; - emit changed( value ); - } - - protected Q_SLOTS: - - //* check whether configuration is changed and emit appropriate signal if yes - virtual void updateChanged(); - - private Q_SLOTS: - - //* select window properties from grabbed pointers - void selectWindowProperties(); - - //* read properties of selected window - void readWindowProperties( bool ); - - private: - - //* map mask and checkbox - using CheckBoxMap=QMap< ExceptionMask, QCheckBox*>; - - Ui::BreezeExceptionDialog m_ui; - - //* map mask and checkbox - CheckBoxMap m_checkboxes; - - //* internal exception - InternalSettingsPtr m_exception; - - //* detection dialog - DetectDialog* m_detectDialog = nullptr; - - //* changed state - bool m_changed = false; - - }; - -} - -#endif diff --git a/config/breezeexceptionlistwidget.cpp b/config/breezeexceptionlistwidget.cpp deleted file mode 100644 index 4bd79d9..0000000 --- a/config/breezeexceptionlistwidget.cpp +++ /dev/null @@ -1,345 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// breezeexceptionlistwidget.cpp -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezeexceptionlistwidget.h" -#include "breezeexceptiondialog.h" - -#include - -#include -#include -#include - -//__________________________________________________________ -namespace Breeze -{ - - //__________________________________________________________ - ExceptionListWidget::ExceptionListWidget( QWidget* parent ): - QWidget( parent ) - { - - // ui - m_ui.setupUi( this ); - - // list - m_ui.exceptionListView->setAllColumnsShowFocus( true ); - m_ui.exceptionListView->setRootIsDecorated( false ); - m_ui.exceptionListView->setSortingEnabled( false ); - m_ui.exceptionListView->setModel( &model() ); - m_ui.exceptionListView->sortByColumn( ExceptionModel::ColumnType ); - m_ui.exceptionListView->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Ignored ) ); - - m_ui.moveUpButton->setIcon( QIcon::fromTheme( QStringLiteral( "arrow-up" ) ) ); - m_ui.moveDownButton->setIcon( QIcon::fromTheme( QStringLiteral( "arrow-down" ) ) ); - m_ui.addButton->setIcon( QIcon::fromTheme( QStringLiteral( "list-add" ) ) ); - m_ui.removeButton->setIcon( QIcon::fromTheme( QStringLiteral( "list-remove" ) ) ); - m_ui.editButton->setIcon( QIcon::fromTheme( QStringLiteral( "edit-rename" ) ) ); - - connect( m_ui.addButton, SIGNAL(clicked()), SLOT(add()) ); - connect( m_ui.editButton, SIGNAL(clicked()), SLOT(edit()) ); - connect( m_ui.removeButton, SIGNAL(clicked()), SLOT(remove()) ); - connect( m_ui.moveUpButton, SIGNAL(clicked()), SLOT(up()) ); - connect( m_ui.moveDownButton, SIGNAL(clicked()), SLOT(down()) ); - - connect( m_ui.exceptionListView, SIGNAL(activated(QModelIndex)), SLOT(edit()) ); - connect( m_ui.exceptionListView, SIGNAL(clicked(QModelIndex)), SLOT(toggle(QModelIndex)) ); - connect( m_ui.exceptionListView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(updateButtons()) ); - - updateButtons(); - resizeColumns(); - - - } - - //__________________________________________________________ - void ExceptionListWidget::setExceptions( const InternalSettingsList& exceptions ) - { - model().set( exceptions ); - resizeColumns(); - setChanged( false ); - } - - //__________________________________________________________ - InternalSettingsList ExceptionListWidget::exceptions() - { - return model().get(); - setChanged( false ); - } - - //__________________________________________________________ - void ExceptionListWidget::updateButtons() - { - - bool hasSelection( !m_ui.exceptionListView->selectionModel()->selectedRows().empty() ); - m_ui.removeButton->setEnabled( hasSelection ); - m_ui.editButton->setEnabled( hasSelection ); - - m_ui.moveUpButton->setEnabled( hasSelection && !m_ui.exceptionListView->selectionModel()->isRowSelected( 0, QModelIndex() ) ); - m_ui.moveDownButton->setEnabled( hasSelection && !m_ui.exceptionListView->selectionModel()->isRowSelected( model().rowCount()-1, QModelIndex() ) ); - - } - - - //_______________________________________________________ - void ExceptionListWidget::add() - { - - - QPointer dialog = new ExceptionDialog( this ); - dialog->setWindowTitle( i18n( "New Exception - Breeze Settings" ) ); - InternalSettingsPtr exception( new InternalSettings() ); - - exception->load(); - - dialog->setException( exception ); - - // run dialog and check existence - if( !dialog->exec() ) - { - delete dialog; - return; - } - - dialog->save(); - delete dialog; - - // check exceptions - if( !checkException( exception ) ) return; - - // create new item - model().add( exception ); - setChanged( true ); - - // make sure item is selected - QModelIndex index( model().index( exception ) ); - if( index != m_ui.exceptionListView->selectionModel()->currentIndex() ) - { - m_ui.exceptionListView->selectionModel()->select( index, QItemSelectionModel::Clear|QItemSelectionModel::Select|QItemSelectionModel::Rows ); - m_ui.exceptionListView->selectionModel()->setCurrentIndex( index, QItemSelectionModel::Current|QItemSelectionModel::Rows ); - } - - resizeColumns(); - - } - - //_______________________________________________________ - void ExceptionListWidget::edit() - { - - // retrieve selection - QModelIndex current( m_ui.exceptionListView->selectionModel()->currentIndex() ); - if( ! model().contains( current ) ) return; - - InternalSettingsPtr exception( model().get( current ) ); - - // create dialog - QPointer dialog( new ExceptionDialog( this ) ); - dialog->setWindowTitle( i18n( "Edit Exception - Breeze Settings" ) ); - dialog->setException( exception ); - - // map dialog - if( !dialog->exec() ) - { - delete dialog; - return; - } - - // check modifications - if( !dialog->isChanged() ) return; - - // retrieve exception - dialog->save(); - delete dialog; - - // check new exception validity - checkException( exception ); - resizeColumns(); - - setChanged( true ); - - } - - //_______________________________________________________ - void ExceptionListWidget::remove() - { - - // confirmation dialog - { - QMessageBox messageBox( QMessageBox::Question, i18n("Question - Breeze Settings" ), i18n("Remove selected exception?"), QMessageBox::Yes | QMessageBox::Cancel ); - messageBox.button( QMessageBox::Yes )->setText( i18n("Remove") ); - messageBox.setDefaultButton( QMessageBox::Cancel ); - if( messageBox.exec() == QMessageBox::Cancel ) return; - } - - // remove - model().remove( model().get( m_ui.exceptionListView->selectionModel()->selectedRows() ) ); - resizeColumns(); - updateButtons(); - - setChanged( true ); - - } - - //_______________________________________________________ - void ExceptionListWidget::toggle( const QModelIndex& index ) - { - - if( !model().contains( index ) ) return; - if( index.column() != ExceptionModel::ColumnEnabled ) return; - - // get matching exception - InternalSettingsPtr exception( model().get( index ) ); - exception->setEnabled( !exception->enabled() ); - setChanged( true ); - - } - - //_______________________________________________________ - void ExceptionListWidget::up() - { - - InternalSettingsList selection( model().get( m_ui.exceptionListView->selectionModel()->selectedRows() ) ); - if( selection.empty() ) { return; } - - // retrieve selected indexes in list and store in model - QModelIndexList selectedIndices( m_ui.exceptionListView->selectionModel()->selectedRows() ); - InternalSettingsList selectedExceptions( model().get( selectedIndices ) ); - - InternalSettingsList currentException( model().get() ); - InternalSettingsList newExceptions; - - for( InternalSettingsList::const_iterator iter = currentException.constBegin(); iter != currentException.constEnd(); ++iter ) - { - - // check if new list is not empty, current index is selected and last index is not. - // if yes, move. - if( - !( newExceptions.empty() || - selectedIndices.indexOf( model().index( *iter ) ) == -1 || - selectedIndices.indexOf( model().index( newExceptions.back() ) ) != -1 - ) ) - { - InternalSettingsPtr last( newExceptions.back() ); - newExceptions.removeLast(); - newExceptions.append( *iter ); - newExceptions.append( last ); - } else newExceptions.append( *iter ); - - } - - model().set( newExceptions ); - - // restore selection - m_ui.exceptionListView->selectionModel()->select( model().index( selectedExceptions.front() ), QItemSelectionModel::Clear|QItemSelectionModel::Select|QItemSelectionModel::Rows ); - for( InternalSettingsList::const_iterator iter = selectedExceptions.constBegin(); iter != selectedExceptions.constEnd(); ++iter ) - { m_ui.exceptionListView->selectionModel()->select( model().index( *iter ), QItemSelectionModel::Select|QItemSelectionModel::Rows ); } - - setChanged( true ); - - } - - //_______________________________________________________ - void ExceptionListWidget::down() - { - - InternalSettingsList selection( model().get( m_ui.exceptionListView->selectionModel()->selectedRows() ) ); - if( selection.empty() ) - { return; } - - // retrieve selected indexes in list and store in model - QModelIndexList selectedIndices( m_ui.exceptionListView->selectionModel()->selectedIndexes() ); - InternalSettingsList selectedExceptions( model().get( selectedIndices ) ); - - InternalSettingsList currentExceptions( model().get() ); - InternalSettingsList newExceptions; - - InternalSettingsListIterator iter( currentExceptions ); - iter.toBack(); - while( iter.hasPrevious() ) - { - - InternalSettingsPtr current( iter.previous() ); - - // check if new list is not empty, current index is selected and last index is not. - // if yes, move. - if( - !( newExceptions.empty() || - selectedIndices.indexOf( model().index( current ) ) == -1 || - selectedIndices.indexOf( model().index( newExceptions.front() ) ) != -1 - ) ) - { - - InternalSettingsPtr first( newExceptions.front() ); - newExceptions.removeFirst(); - newExceptions.prepend( current ); - newExceptions.prepend( first ); - - } else newExceptions.prepend( current ); - } - - model().set( newExceptions ); - - // restore selection - m_ui.exceptionListView->selectionModel()->select( model().index( selectedExceptions.front() ), QItemSelectionModel::Clear|QItemSelectionModel::Select|QItemSelectionModel::Rows ); - for( InternalSettingsList::const_iterator iter = selectedExceptions.constBegin(); iter != selectedExceptions.constEnd(); ++iter ) - { m_ui.exceptionListView->selectionModel()->select( model().index( *iter ), QItemSelectionModel::Select|QItemSelectionModel::Rows ); } - - setChanged( true ); - - } - - //_______________________________________________________ - void ExceptionListWidget::resizeColumns() const - { - m_ui.exceptionListView->resizeColumnToContents( ExceptionModel::ColumnEnabled ); - m_ui.exceptionListView->resizeColumnToContents( ExceptionModel::ColumnType ); - m_ui.exceptionListView->resizeColumnToContents( ExceptionModel::ColumnRegExp ); - } - - //_______________________________________________________ - bool ExceptionListWidget::checkException( InternalSettingsPtr exception ) - { - - while( exception->exceptionPattern().isEmpty() || !QRegExp( exception->exceptionPattern() ).isValid() ) - { - - QMessageBox::warning( this, i18n( "Warning - Breeze Settings" ), i18n("Regular Expression syntax is incorrect") ); - QPointer dialog( new ExceptionDialog( this ) ); - dialog->setException( exception ); - if( dialog->exec() == QDialog::Rejected ) - { - delete dialog; - return false; - } - - dialog->save(); - delete dialog; - } - - return true; - } - -} diff --git a/config/breezeexceptionlistwidget.h b/config/breezeexceptionlistwidget.h deleted file mode 100644 index cbbf0c1..0000000 --- a/config/breezeexceptionlistwidget.h +++ /dev/null @@ -1,124 +0,0 @@ -#ifndef breezeexceptionlistwidget_h -#define breezeexceptionlistwidget_h -////////////////////////////////////////////////////////////////////////////// -// breezeexceptionlistwidget.h -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "ui_breezeexceptionlistwidget.h" -#include "breezeexceptionmodel.h" - -//* QDialog used to commit selected files -namespace Breeze -{ - - class ExceptionListWidget: public QWidget - { - - //* Qt meta object - Q_OBJECT - - public: - - //* constructor - explicit ExceptionListWidget( QWidget* = nullptr ); - - //* set exceptions - void setExceptions( const InternalSettingsList& ); - - //* get exceptions - InternalSettingsList exceptions(); - - //* true if changed - virtual bool isChanged() const - { return m_changed; } - - Q_SIGNALS: - - //* emitted when changed - void changed( bool ); - - protected: - - //* model - const ExceptionModel& model() const - { return m_model; } - - //* model - ExceptionModel& model() - { return m_model; } - - protected Q_SLOTS: - - //* update button states - virtual void updateButtons(); - - //* add - virtual void add(); - - //* edit - virtual void edit(); - - //* remove - virtual void remove(); - - //* toggle - virtual void toggle( const QModelIndex& ); - - //* move up - virtual void up(); - - //* move down - virtual void down(); - - protected: - - //* resize columns - void resizeColumns() const; - - //* check exception - bool checkException( InternalSettingsPtr ); - - //* set changed state - virtual void setChanged( bool value ) - { - m_changed = value; - emit changed( value ); - } - - private: - - //* model - ExceptionModel m_model; - - //* ui - Ui_BreezeExceptionListWidget m_ui; - - //* changed state - bool m_changed = false; - - }; - -} - -#endif diff --git a/config/breezeexceptionmodel.cpp b/config/breezeexceptionmodel.cpp deleted file mode 100644 index db5cce4..0000000 --- a/config/breezeexceptionmodel.cpp +++ /dev/null @@ -1,107 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// breezeexceptionmodel.cpp -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezeexceptionmodel.h" - -#include - -namespace Breeze -{ - - //_______________________________________________ - const QString ExceptionModel::m_columnTitles[ ExceptionModel::nColumns ] = - { - QStringLiteral( "" ), - i18n("Exception Type"), - i18n("Regular Expression") - }; - - //__________________________________________________________________ - QVariant ExceptionModel::data( const QModelIndex& index, int role ) const - { - - // check index, role and column - if( !index.isValid() ) return QVariant(); - - // retrieve associated file info - const InternalSettingsPtr& configuration( get(index) ); - - // return text associated to file and column - if( role == Qt::DisplayRole ) - { - - switch( index.column() ) - { - case ColumnType: - { - switch( configuration->exceptionType() ) - { - - case InternalSettings::ExceptionWindowTitle: - return i18n( "Window Title" ); - - default: - case InternalSettings::ExceptionWindowClassName: - return i18n( "Window Class Name" ); - } - - } - - case ColumnRegExp: return configuration->exceptionPattern(); - default: return QVariant(); - break; - } - - } else if( role == Qt::CheckStateRole && index.column() == ColumnEnabled ) { - - return configuration->enabled() ? Qt::Checked : Qt::Unchecked; - - } else if( role == Qt::ToolTipRole && index.column() == ColumnEnabled ) { - - return i18n("Enable/disable this exception"); - - } - - - return QVariant(); - } - - //__________________________________________________________________ - QVariant ExceptionModel::headerData(int section, Qt::Orientation orientation, int role) const - { - - if( - orientation == Qt::Horizontal && - role == Qt::DisplayRole && - section >= 0 && - section < nColumns ) - { return m_columnTitles[section]; } - - // return empty - return QVariant(); - - } - -} diff --git a/config/breezeexceptionmodel.h b/config/breezeexceptionmodel.h deleted file mode 100644 index 767e288..0000000 --- a/config/breezeexceptionmodel.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef breezeexceptionmodel_h -#define breezeexceptionmodel_h -////////////////////////////////////////////////////////////////////////////// -// breezeexceptionmodel.h -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezelistmodel.h" -#include "breezesettings.h" -#include "breeze.h" - -namespace Breeze -{ - - //* qlistview for object counters - class ExceptionModel: public ListModel - { - - public: - - //* number of columns - enum { nColumns = 3 }; - - //* column type enumeration - enum ColumnType { - ColumnEnabled, - ColumnType, - ColumnRegExp - }; - - - //*@name methods reimplemented from base class - //@{ - - //* return data for a given index - QVariant data(const QModelIndex &index, int role) const override; - - //* header data - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; - - //* number of columns for a given index - int columnCount(const QModelIndex& ) const override - { return nColumns; } - - //@} - - protected: - - //* sort - void privateSort( int, Qt::SortOrder ) override - {} - - private: - - //* column titles - static const QString m_columnTitles[ nColumns ]; - - }; - -} -#endif diff --git a/config/breezeitemmodel.cpp b/config/breezeitemmodel.cpp deleted file mode 100644 index 7ca71a3..0000000 --- a/config/breezeitemmodel.cpp +++ /dev/null @@ -1,68 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// itemmodel.cpp -// ------------------- -// -// Copyright (c) 2009-2010 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezeitemmodel.h" - -namespace Breeze -{ - - //_______________________________________________________________ - ItemModel::ItemModel( QObject* parent ): - QAbstractItemModel( parent ) - {} - - //____________________________________________________________ - void ItemModel::sort( int column, Qt::SortOrder order ) - { - - // store column and order - m_sortColumn = column; - m_sortOrder = order; - - // emit signals and call private methods - emit layoutAboutToBeChanged(); - privateSort( column, order ); - emit layoutChanged(); - - } - - //____________________________________________________________ - QModelIndexList ItemModel::indexes( int column, const QModelIndex& parent ) const - { - QModelIndexList out; - int rows( rowCount( parent ) ); - for( int row = 0; row < rows; row++ ) - { - QModelIndex index( this->index( row, column, parent ) ); - if( !index.isValid() ) continue; - out.append( index ); - out += indexes( column, index ); - } - - return out; - - } - -} diff --git a/config/breezeitemmodel.h b/config/breezeitemmodel.h deleted file mode 100644 index 3af4ab3..0000000 --- a/config/breezeitemmodel.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef ItemModel_h -#define ItemModel_h - -////////////////////////////////////////////////////////////////////////////// -// itemmodel.h -// ------------------- -// -// Copyright (c) 2009-2010 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include - -namespace Breeze -{ - - //* Job model. Stores job information for display in lists - class ItemModel : public QAbstractItemModel - { - - public: - - //* constructor - explicit ItemModel(QObject *parent = nullptr); - - //* destructor - virtual ~ItemModel() - {} - - //* return all indexes in model starting from parent [recursive] - QModelIndexList indexes( int column = 0, const QModelIndex& parent = QModelIndex() ) const; - - //*@name sorting - //@{ - - //* sort - virtual void sort() - { sort( sortColumn(), sortOrder() ); } - - //* sort - void sort( int column, Qt::SortOrder order = Qt::AscendingOrder ) override; - - //* current sorting column - const int& sortColumn() const - { return m_sortColumn; } - - //* current sort order - const Qt::SortOrder& sortOrder() const - { return m_sortOrder; } - - //@} - - protected: - - //* this sort columns without calling the layout changed callbacks - void privateSort() - { privateSort( m_sortColumn, m_sortOrder ); } - - //* private sort, with no signals emmitted - virtual void privateSort( int column, Qt::SortOrder order ) = 0; - - //* used to sort items in list - class SortFTor - { - - public: - - //* constructor - explicit SortFTor( const int& type, Qt::SortOrder order = Qt::AscendingOrder ): - _type( type ), - _order( order ) - {} - - protected: - - //* column - int _type; - - //* order - Qt::SortOrder _order; - - }; - - private: - - //* sorting column - int m_sortColumn = 0; - - //* sorting order - Qt::SortOrder m_sortOrder = Qt::AscendingOrder; - - }; - -} - -#endif diff --git a/config/breezelistmodel.h b/config/breezelistmodel.h deleted file mode 100644 index 182478c..0000000 --- a/config/breezelistmodel.h +++ /dev/null @@ -1,365 +0,0 @@ -#ifndef ListModel_h -#define ListModel_h -////////////////////////////////////////////////////////////////////////////// -// listmodel.h -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// - -#include "breezeitemmodel.h" - -#include -#include - -#include - -namespace Breeze -{ - //! Job model. Stores job information for display in lists - template class ListModel : public ItemModel - { - - public: - - //! value type - typedef T ValueType; - - //! reference - typedef T& Reference; - - //! pointer - typedef T* Pointer; - - //! value list and iterators - typedef QList List; - typedef QListIterator ListIterator; - typedef QMutableListIterator MutableListIterator; - - //! list of vector - // typedef QSet Set; - - //! constructor - ListModel(QObject *parent = nullptr): - ItemModel( parent ) - {} - - //! destructor - virtual ~ListModel() - {} - - //!@name methods reimplemented from base class - //@{ - - //! flags - Qt::ItemFlags flags(const QModelIndex &index) const override - { - if (!index.isValid()) return nullptr; - return Qt::ItemIsEnabled | Qt::ItemIsSelectable; - } - - //! unique index for given row, column and parent index - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override - { - - // check if index is valid - if( !hasIndex( row, column, parent ) ) return QModelIndex(); - - // return invalid index if parent is valid - if( parent.isValid() ) return QModelIndex(); - - // check against _values - return ( row < (int) _values.size() ) ? createIndex( row, column ):QModelIndex(); - - } - - //! index of parent - QModelIndex parent(const QModelIndex &) const override - { return QModelIndex(); } - - //! number of rows below given index - int rowCount(const QModelIndex &parent = QModelIndex()) const override - { return parent.isValid() ? 0:_values.size(); } - - //@} - - //!@name selection - //@{ - - //! clear internal list selected items - virtual void clearSelectedIndexes() - { _selection.clear(); } - - //! store index internal selection state - virtual void setIndexSelected( const QModelIndex& index, bool value ) - { - if( value ) _selection.push_back( get(index) ); - else _selection.erase( std::remove( _selection.begin(), _selection.end(), get(index) ), _selection.end() ); - } - - //! get list of internal selected items - virtual QModelIndexList selectedIndexes() const - { - - QModelIndexList out; - for( typename List::const_iterator iter = _selection.begin(); iter != _selection.end(); iter++ ) - { - QModelIndex index( ListModel::index( *iter ) ); - if( index.isValid() ) out.push_back( index ); - } - return out; - - } - - //@} - - //!@name interface - //@{ - - //! add value - virtual void add( const ValueType& value ) - { - - emit layoutAboutToBeChanged(); - _add( value ); - privateSort(); - emit layoutChanged(); - - } - - //! add values - virtual void add( const List& values ) - { - - // check if not empty - // this avoids sending useless signals - if( values.empty() ) return; - - emit layoutAboutToBeChanged(); - - for( typename List::const_iterator iter = values.begin(); iter != values.end(); iter++ ) - { _add( *iter ); } - - privateSort(); - emit layoutChanged(); - - } - - - //! insert values - virtual void insert( const QModelIndex& index, const ValueType& value ) - { - emit layoutAboutToBeChanged(); - _insert( index, value ); - emit layoutChanged(); - } - - //! insert values - virtual void insert( const QModelIndex& index, const List& values ) - { - emit layoutAboutToBeChanged(); - - // need to loop in reverse order so that the "values" ordering is preserved - ListIterator iter( values ); - iter.toBack(); - while( iter.hasPrevious() ) - { _insert( index, iter.previous() ); } - - emit layoutChanged(); - - } - - //! insert values - virtual void replace( const QModelIndex& index, const ValueType& value ) - { - if( !index.isValid() ) add( value ); - else { - emit layoutAboutToBeChanged(); - setIndexSelected( index, false ); - _values[index.row()] = value; - setIndexSelected( index, true ); - emit layoutChanged(); - } - } - - //! remove - virtual void remove( const ValueType& value ) - { - - emit layoutAboutToBeChanged(); - _remove( value ); - emit layoutChanged(); - - } - - //! remove - virtual void remove( const List& values ) - { - - // check if not empty - // this avoids sending useless signals - if( values.empty() ) return; - - emit layoutAboutToBeChanged(); - for( typename List::const_iterator iter = values.begin(); iter != values.end(); iter++ ) - { _remove( *iter ); } - emit layoutChanged(); - - } - - //! clear - virtual void clear() - { set( List() ); } - - //! update values from list - /*! - values that are not found in current are removed - new values are set to the end. - This is slower than the "set" method, but the selection is not cleared in the process - */ - virtual void update( List values ) - { - - emit layoutAboutToBeChanged(); - - // store values to be removed - List removed_values; - - // update values that are common to both lists - for( typename List::iterator iter = _values.begin(); iter != _values.end(); iter++ ) - { - - // see if iterator is in list - typename List::iterator found_iter( std::find( values.begin(), values.end(), *iter ) ); - if( found_iter == values.end() ) removed_values.push_back( *iter ); - else { - *iter = *found_iter; - values.erase( found_iter ); - } - - } - - // remove values that have not been found in new list - for( typename List::const_iterator iter = removed_values.constBegin(); iter != removed_values.constEnd(); iter++ ) - { _remove( *iter ); } - - // add remaining values - for( typename List::const_iterator iter = values.constBegin(); iter != values.constEnd(); iter++ ) - { _add( *iter ); } - - privateSort(); - emit layoutChanged(); - - } - - //! set all values - virtual void set( const List& values ) - { - - emit layoutAboutToBeChanged(); - _values = values; - _selection.clear(); - privateSort(); - emit layoutChanged(); - } - - //! return all values - const List& get() const - { return _values; } - - //! return value for given index - virtual ValueType get( const QModelIndex& index ) const - { return (index.isValid() && index.row() < int(_values.size()) ) ? _values[index.row()]:ValueType(); } - - //! return value for given index - virtual ValueType& get( const QModelIndex& index ) - { - Q_ASSERT( index.isValid() && index.row() < int( _values.size() ) ); - return _values[index.row()]; - } - - //! return all values - List get( const QModelIndexList& indexes ) const - { - List out; - for( QModelIndexList::const_iterator iter = indexes.begin(); iter != indexes.end(); iter++ ) - { if( iter->isValid() && iter->row() < int(_values.size()) ) out.push_back( get( *iter ) ); } - return out; - } - - //! return index associated to a given value - virtual QModelIndex index( const ValueType& value, int column = 0 ) const - { - for( int row = 0; row < _values.size(); ++row ) - { if( value == _values[row] ) return index( row, column ); } - return QModelIndex(); - } - - //@} - - //! return true if model contains given index - virtual bool contains( const QModelIndex& index ) const - { return index.isValid() && index.row() < _values.size(); } - - protected: - - //! return all values - List& _get() - { return _values; } - - //! add, without update - virtual void _add( const ValueType& value ) - { - typename List::iterator iter = std::find( _values.begin(), _values.end(), value ); - if( iter == _values.end() ) _values.push_back( value ); - else *iter = value; - } - - //! add, without update - virtual void _insert( const QModelIndex& index, const ValueType& value ) - { - if( !index.isValid() ) add( value ); - int row = 0; - typename List::iterator iter( _values.begin() ); - for( ;iter != _values.end() && row != index.row(); iter++, row++ ) - {} - - _values.insert( iter, value ); - } - - //! remove, without update - virtual void _remove( const ValueType& value ) - { - _values.erase( std::remove( _values.begin(), _values.end(), value ), _values.end() ); - _selection.erase( std::remove( _selection.begin(), _selection.end(), value ), _selection.end() ); - } - - private: - - //! values - List _values; - - //! selection - List _selection; - - }; -} -#endif diff --git a/config/ui/breezeconfigurationui.ui b/config/ui/breezeconfigurationui.ui deleted file mode 100644 index e235a2a..0000000 --- a/config/ui/breezeconfigurationui.ui +++ /dev/null @@ -1,552 +0,0 @@ - - - BreezeConfigurationUI - - - - 0 - 0 - 428 - 418 - - - - - 0 - - - - - 0 - - - - General - - - - - - Tit&le alignment: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - titleAlignment - - - - - - - - Left - - - - - Center - - - - - Center (Full Width) - - - - - Right - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - B&utton size: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - buttonSize - - - - - - - - Tiny - - - - - Small - - - - - Medium - - - - - Large - - - - - Very Large - - - - - - - - Allow resizing maximized windows from window edges - - - - - - - Add handle to resize windows with no border - - - - - - - - - Opacity: - - - - - - - % - - - 100 - - - - - - - Qt::Horizontal - - - - 5 - 5 - - - - - - - - Font: - - - - - - - - - 5 - - - 50 - - - - - - - Size: - - - - - - - Qt::Horizontal - - - - 5 - 5 - - - - - - - - Weight: - - - - - - - 0 - - - - Normal - - - - - Medium - - - - - DemiBold - - - - - Bold - - - - - ExtraBold - - - - - Black - - - - - - - - Italic - - - - - - - - - - Qt::Horizontal - - - - 5 - 5 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - Animations - - - - - - false - - - Anima&tions duration: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - animationsDuration - - - - - - - false - - - ms - - - 500 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Enable animations - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - Shadows - - - - - - Si&ze: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - shadowSize - - - - - - - - None - - - - - Small - - - - - Medium - - - - - Large - - - - - Very Large - - - - - - - - S&trength: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - shadowStrength - - - - - - - % - - - 10 - - - 100 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Color: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - Window-Specific Overrides - - - - - - - 0 - 0 - - - - - - - - - - - - - KColorButton - QPushButton -
kcolorbutton.h
-
- - Breeze::ExceptionListWidget - QWidget -
config/breezeexceptionlistwidget.h
- 1 -
-
- - tabWidget - titleAlignment - buttonSize - drawBorderOnMaximizedWindows - drawSizeGrip - animationsEnabled - animationsDuration - shadowSize - shadowStrength - shadowColor - - - - - animationsEnabled - toggled(bool) - animationsDurationLabel - setEnabled(bool) - - - 34 - 194 - - - 84 - 221 - - - - - animationsEnabled - toggled(bool) - animationsDuration - setEnabled(bool) - - - 108 - 194 - - - 141 - 229 - - - - -
diff --git a/config/ui/breezedetectwidget.ui b/config/ui/breezedetectwidget.ui deleted file mode 100644 index 5db36c8..0000000 --- a/config/ui/breezedetectwidget.ui +++ /dev/null @@ -1,146 +0,0 @@ - - - BreezeDetectWidget - - - - 0 - 0 - 400 - 239 - - - - Dialog - - - - - - Information about Selected Window - - - - - - Class: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - TextLabel - - - - - - - Title: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - TextLabel - - - - - - - - - - Window Property Selection - - - - - - Use window class (whole application) - - - - - - - - - - Use window title - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - BreezeDetectWidget - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - BreezeDetectWidget - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/config/ui/breezeexceptiondialog.ui b/config/ui/breezeexceptiondialog.ui deleted file mode 100644 index 2c6ab5e..0000000 --- a/config/ui/breezeexceptiondialog.ui +++ /dev/null @@ -1,333 +0,0 @@ - - - BreezeExceptionDialog - - - - 0 - 0 - 362 - 321 - - - - Dialog - - - - - - Window Identification - - - - - - &Matching window property: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - exceptionType - - - - - - - Regular expression &to match: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - exceptionEditor - - - - - - - Detect Window Properties - - - - - - - true - - - - - - - - Window Class Name - - - - - Window Title - - - - - - - - - - - Decoration Options - - - - - - Border size: - - - - - - - false - - - - No Border - - - - - No Side Borders - - - - - Tiny - - - - - Normal - - - - - Large - - - - - Very Large - - - - - Huge - - - - - Very Huge - - - - - Oversized - - - - - - - - Only for dialogs - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Hide window title bar - - - - - - - Opaque title bar - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 16 - 5 - - - - - - - - Override opacity: - - - - - - - % - - - -1 - - - 100 - - - -1 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - BreezeExceptionDialog - accept() - - - 252 - 342 - - - 157 - 274 - - - - - buttonBox - rejected() - BreezeExceptionDialog - reject() - - - 320 - 342 - - - 286 - 274 - - - - - borderSizeCheckBox - toggled(bool) - borderSizeComboBox - setEnabled(bool) - - - 125 - 162 - - - 316 - 163 - - - - - opaqueTitleBar - toggled(bool) - opacityOverrideLabel - setDisabled(bool) - - - 104 - 202 - - - 82 - 229 - - - - - opaqueTitleBar - toggled(bool) - opacityOverrideLabelSpinBox - setDisabled(bool) - - - 104 - 202 - - - 166 - 229 - - - - - diff --git a/config/ui/breezeexceptionlistwidget.ui b/config/ui/breezeexceptionlistwidget.ui deleted file mode 100644 index bf08c76..0000000 --- a/config/ui/breezeexceptionlistwidget.ui +++ /dev/null @@ -1,114 +0,0 @@ - - - BreezeExceptionListWidget - - - - 0 - 0 - 473 - 182 - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 100 - 100 - - - - - - - - Qt::Vertical - - - - 20 - 1 - - - - - - - - Move Up - - - - - - - Move Down - - - - - - - Add - - - - - - - Remove - - - - - - - Edit - - - - - - - exceptionListView - moveUpButton - moveDownButton - addButton - removeButton - editButton - - - - diff --git a/install.sh b/install.sh deleted file mode 100755 index 42e7e81..0000000 --- a/install.sh +++ /dev/null @@ -1,4 +0,0 @@ -mkdir build && cd build -cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DKDE_INSTALL_LIBDIR=lib -DBUILD_TESTING=OFF -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -make -sudo make install diff --git a/libbreezecommon/CMakeLists.txt b/libbreezecommon/CMakeLists.txt deleted file mode 100644 index 5941551..0000000 --- a/libbreezecommon/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -################# dependencies ################# - -### Qt/KDE -find_package(Qt5 REQUIRED CONFIG COMPONENTS Widgets) - -################# configuration ################# -configure_file(config-breezecommon.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-breezecommon.h ) - -################# breezestyle target ################# -set(breeze10common_LIB_SRCS - breezeboxshadowrenderer.cpp -) - -add_library(breeze10common5 ${breeze10common_LIB_SRCS}) - -generate_export_header(breeze10common5 - BASE_NAME breezecommon - EXPORT_FILE_NAME breezecommon_export.h) - -target_link_libraries(breeze10common5 - PUBLIC - Qt5::Core - Qt5::Gui) - -set_target_properties(breeze10common5 PROPERTIES - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION_MAJOR}) - -install(TARGETS breeze10common5 ${INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY NAMELINK_SKIP) diff --git a/libbreezecommon/breezeboxshadowrenderer.cpp b/libbreezecommon/breezeboxshadowrenderer.cpp deleted file mode 100644 index f879283..0000000 --- a/libbreezecommon/breezeboxshadowrenderer.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (C) 2018 Vlad Zagorodniy - * - * The box blur implementation is based on AlphaBoxBlur from Firefox. - * - * 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 - * (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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -// own -#include "breezeboxshadowrenderer.h" - -// auto-generated -#include "config-breezecommon.h" - -// Qt -#include - -#include - -namespace Breeze -{ - -static inline int calculateBlurRadius(qreal stdDev) -{ - // See https://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement - const qreal gaussianScaleFactor = (3.0 * qSqrt(2.0 * M_PI) / 4.0) * 1.5; - return qMax(2, qFloor(stdDev * gaussianScaleFactor + 0.5)); -} - -static inline qreal calculateBlurStdDev(int radius) -{ - // See https://www.w3.org/TR/css-backgrounds-3/#shadow-blur - return radius * 0.5; -} - -static inline QSize calculateBlurExtent(int radius) -{ - const int blurRadius = calculateBlurRadius(calculateBlurStdDev(radius)); - return QSize(blurRadius, blurRadius); -} - -struct BoxLobes -{ - int left; ///< how many pixels sample to the left - int right; ///< how many pixels sample to the right -}; - -/** - * Compute box filter parameters. - * - * @param radius The blur radius. - * @returns Parameters for three box filters. - **/ -static QVector computeLobes(int radius) -{ - const int blurRadius = calculateBlurRadius(calculateBlurStdDev(radius)); - const int z = blurRadius / 3; - - int major; - int minor; - int final; - - switch (blurRadius % 3) { - case 0: - major = z; - minor = z; - final = z; - break; - - case 1: - major = z + 1; - minor = z; - final = z; - break; - - case 2: - major = z + 1; - minor = z; - final = z + 1; - break; - - default: - Q_UNREACHABLE(); - break; - } - - Q_ASSERT(major + minor + final == blurRadius); - - return { - {major, minor}, - {minor, major}, - {final, final} - }; -} - -/** - * Process a row with a box filter. - * - * @param src The start of the row. - * @param dst The destination. - * @param width The width of the row, in pixels. - * @param horizontalStride The number of bytes from one alpha value to the - * next alpha value. - * @param verticalStride The number of bytes from one row to the next row. - * @param lobes Params of the box filter. - * @param transposeInput Whether the input is transposed. - * @param transposeOutput Whether the output should be transposed. - **/ -static inline void boxBlurRowAlpha(const uint8_t *src, uint8_t *dst, int width, int horizontalStride, - int verticalStride, const BoxLobes &lobes, bool transposeInput, - bool transposeOutput) -{ - const int inputStep = transposeInput ? verticalStride : horizontalStride; - const int outputStep = transposeOutput ? verticalStride : horizontalStride; - - const int boxSize = lobes.left + 1 + lobes.right; - const int reciprocal = (1 << 24) / boxSize; - - uint32_t alphaSum = (boxSize + 1) / 2; - - const uint8_t *left = src; - const uint8_t *right = src; - uint8_t *out = dst; - - const uint8_t firstValue = src[0]; - const uint8_t lastValue = src[(width - 1) * inputStep]; - - alphaSum += firstValue * lobes.left; - - const uint8_t *initEnd = src + (boxSize - lobes.left) * inputStep; - while (right < initEnd) { - alphaSum += *right; - right += inputStep; - } - - const uint8_t *leftEnd = src + boxSize * inputStep; - while (right < leftEnd) { - *out = (alphaSum * reciprocal) >> 24; - alphaSum += *right - firstValue; - right += inputStep; - out += outputStep; - } - - const uint8_t *centerEnd = src + width * inputStep; - while (right < centerEnd) { - *out = (alphaSum * reciprocal) >> 24; - alphaSum += *right - *left; - left += inputStep; - right += inputStep; - out += outputStep; - } - - const uint8_t *rightEnd = dst + width * outputStep; - while (out < rightEnd) { - *out = (alphaSum * reciprocal) >> 24; - alphaSum += lastValue - *left; - left += inputStep; - out += outputStep; - } -} - -/** - * Blur the alpha channel of a given image. - * - * @param image The input image. - * @param radius The blur radius. - * @param rect Specifies what part of the image to blur. If nothing is provided, then - * the whole alpha channel of the input image will be blurred. - **/ -static inline void boxBlurAlpha(QImage &image, int radius, const QRect &rect = {}) -{ - if (radius < 2) { - return; - } - - const QVector lobes = computeLobes(radius); - - const QRect blurRect = rect.isNull() ? image.rect() : rect; - - const int alphaOffset = QSysInfo::ByteOrder == QSysInfo::BigEndian ? 0 : 3; - const int width = blurRect.width(); - const int height = blurRect.height(); - const int rowStride = image.bytesPerLine(); - const int pixelStride = image.depth() >> 3; - - const int bufferStride = qMax(width, height) * pixelStride; - QScopedPointer > buf(new uint8_t[2 * bufferStride]); - uint8_t *buf1 = buf.data(); - uint8_t *buf2 = buf1 + bufferStride; - - // Blur the image in horizontal direction. - for (int i = 0; i < height; ++i) { - uint8_t *row = image.scanLine(blurRect.y() + i) + blurRect.x() * pixelStride + alphaOffset; - boxBlurRowAlpha(row, buf1, width, pixelStride, rowStride, lobes[0], false, false); - boxBlurRowAlpha(buf1, buf2, width, pixelStride, rowStride, lobes[1], false, false); - boxBlurRowAlpha(buf2, row, width, pixelStride, rowStride, lobes[2], false, false); - } - - // Blur the image in vertical direction. - for (int i = 0; i < width; ++i) { - uint8_t *column = image.scanLine(blurRect.y()) + (blurRect.x() + i) * pixelStride + alphaOffset; - boxBlurRowAlpha(column, buf1, height, pixelStride, rowStride, lobes[0], true, false); - boxBlurRowAlpha(buf1, buf2, height, pixelStride, rowStride, lobes[1], false, false); - boxBlurRowAlpha(buf2, column, height, pixelStride, rowStride, lobes[2], false, true); - } -} - -static inline void mirrorTopLeftQuadrant(QImage &image) -{ - const int width = image.width(); - const int height = image.height(); - - const int centerX = qCeil(width * 0.5); - const int centerY = qCeil(height * 0.5); - - const int alphaOffset = QSysInfo::ByteOrder == QSysInfo::BigEndian ? 0 : 3; - const int stride = image.depth() >> 3; - - for (int y = 0; y < centerY; ++y) { - uint8_t *in = image.scanLine(y) + alphaOffset; - uint8_t *out = in + (width - 1) * stride; - - for (int x = 0; x < centerX; ++x, in += stride, out -= stride) { - *out = *in; - } - } - - for (int y = 0; y < centerY; ++y) { - const uint8_t *in = image.scanLine(y) + alphaOffset; - uint8_t *out = image.scanLine(width - y - 1) + alphaOffset; - - for (int x = 0; x < width; ++x, in += stride, out += stride) { - *out = *in; - } - } -} - -static void renderShadow(QPainter *painter, const QRect &rect, qreal borderRadius, const QPoint &offset, int radius, const QColor &color) -{ - const QSize inflation = calculateBlurExtent(radius); - const QSize size = rect.size() + 2 * inflation; - - const qreal dpr = painter->device()->devicePixelRatioF(); - - QImage shadow(size * dpr, QImage::Format_ARGB32_Premultiplied); - shadow.setDevicePixelRatio(dpr); - shadow.fill(Qt::transparent); - - QRect boxRect(QPoint(0, 0), rect.size()); - boxRect.moveCenter(QRect(QPoint(0, 0), size).center()); - - const qreal xRadius = 2.0 * borderRadius / boxRect.width(); - const qreal yRadius = 2.0 * borderRadius / boxRect.height(); - - QPainter shadowPainter; - shadowPainter.begin(&shadow); - shadowPainter.setRenderHint(QPainter::Antialiasing); - shadowPainter.setPen(Qt::NoPen); - shadowPainter.setBrush(Qt::black); - shadowPainter.drawRoundedRect(boxRect, xRadius, yRadius); - shadowPainter.end(); - - // Because the shadow texture is symmetrical, that's enough to blur - // only the top-left quadrant and then mirror it. - const QRect blurRect(0, 0, qCeil(shadow.width() * 0.5), qCeil(shadow.height() * 0.5)); - const int scaledRadius = qRound(radius * dpr); - boxBlurAlpha(shadow, scaledRadius, blurRect); - mirrorTopLeftQuadrant(shadow); - - // Give the shadow a tint of the desired color. - shadowPainter.begin(&shadow); - shadowPainter.setCompositionMode(QPainter::CompositionMode_SourceIn); - shadowPainter.fillRect(shadow.rect(), color); - shadowPainter.end(); - - // Actually, present the shadow. - QRect shadowRect = shadow.rect(); - shadowRect.setSize(shadowRect.size() / dpr); - shadowRect.moveCenter(rect.center() + offset); - painter->drawImage(shadowRect, shadow); -} - -void BoxShadowRenderer::setBoxSize(const QSize &size) -{ - m_boxSize = size; -} - -void BoxShadowRenderer::setBorderRadius(qreal radius) -{ - m_borderRadius = radius; -} - -void BoxShadowRenderer::setDevicePixelRatio(qreal dpr) -{ - m_dpr = dpr; -} - -void BoxShadowRenderer::addShadow(const QPoint &offset, int radius, const QColor &color) -{ - Shadow shadow = {}; - shadow.offset = offset; - shadow.radius = radius; - shadow.color = color; - m_shadows.append(shadow); -} - -QImage BoxShadowRenderer::render() const -{ - if (m_shadows.isEmpty()) { - return {}; - } - - QSize canvasSize; - for (const Shadow &shadow : qAsConst(m_shadows)) { - canvasSize = canvasSize.expandedTo( - calculateMinimumShadowTextureSize(m_boxSize, shadow.radius, shadow.offset)); - } - - QImage canvas(canvasSize * m_dpr, QImage::Format_ARGB32_Premultiplied); - canvas.setDevicePixelRatio(m_dpr); - canvas.fill(Qt::transparent); - - QRect boxRect(QPoint(0, 0), m_boxSize); - boxRect.moveCenter(QRect(QPoint(0, 0), canvasSize).center()); - - QPainter painter(&canvas); - for (const Shadow &shadow : qAsConst(m_shadows)) { - renderShadow(&painter, boxRect, m_borderRadius, shadow.offset, shadow.radius, shadow.color); - } - painter.end(); - - return canvas; -} - -QSize BoxShadowRenderer::calculateMinimumBoxSize(int radius) -{ - const QSize blurExtent = calculateBlurExtent(radius); - return 2 * blurExtent + QSize(1, 1); -} - -QSize BoxShadowRenderer::calculateMinimumShadowTextureSize(const QSize &boxSize, int radius, const QPoint &offset) -{ - return boxSize + 2 * calculateBlurExtent(radius) + QSize(qAbs(offset.x()), qAbs(offset.y())); -} - -} // namespace Breeze diff --git a/libbreezecommon/breezeboxshadowrenderer.h b/libbreezecommon/breezeboxshadowrenderer.h deleted file mode 100644 index f363df2..0000000 --- a/libbreezecommon/breezeboxshadowrenderer.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2018 Vlad Zagorodniy - * - * 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 - * (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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#pragma once - -// own -#include "breezecommon_export.h" - -// Qt -#include -#include -#include -#include - -namespace Breeze -{ - -class BREEZECOMMON_EXPORT BoxShadowRenderer -{ -public: - // Compiler generated constructors & destructor are fine. - - /** - * Set the size of the box. - * @param size The size of the box. - **/ - void setBoxSize(const QSize &size); - - /** - * Set the radius of box' corners. - * @param radius The border radius, in pixels. - **/ - void setBorderRadius(qreal radius); - - /** - * Set the device pixel ratio of the resulting shadow texture. - * @param dpr The device pixel ratio. - **/ - void setDevicePixelRatio(qreal dpr); - - /** - * Add a shadow. - * @param offset The offset of the shadow. - * @param radius The blur radius. - * @param color The color of the shadow. - **/ - void addShadow(const QPoint &offset, int radius, const QColor &color); - - /** - * Render the shadow. - **/ - QImage render() const; - - /** - * Calculate the minimum size of the box. - * - * This helper computes the minimum size of the box so the shadow behind it has - * full its strength. - * - * @param radius The blur radius of the shadow. - **/ - static QSize calculateMinimumBoxSize(int radius); - - /** - * Calculate the minimum size of the shadow texture. - * - * This helper computes the minimum size of the resulting texture so the shadow - * is not clipped. - * - * @param boxSize The size of the box. - * @param radius The blur radius. - * @param offset The offset of the shadow. - **/ - static QSize calculateMinimumShadowTextureSize(const QSize &boxSize, int radius, const QPoint &offset); - -private: - QSize m_boxSize; - qreal m_borderRadius = 0.0; - qreal m_dpr = 1.0; - - struct Shadow { - QPoint offset; - int radius; - QColor color; - }; - - QVector m_shadows; -}; - -} // namespace Breeze diff --git a/libbreezecommon/config-breezecommon.h.cmake b/libbreezecommon/config-breezecommon.h.cmake deleted file mode 100644 index 22cf748..0000000 --- a/libbreezecommon/config-breezecommon.h.cmake +++ /dev/null @@ -1,28 +0,0 @@ -/* config-breezecommon.h. Generated by cmake from config-breezecommon.h.cmake */ - -/************************************************************************* - * Copyright (C) 2014 by Hugo Pereira Da Costa * - * * - * 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 * - * (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, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * - *************************************************************************/ - -#ifndef config_breeze_common_h -#define config_breeze_common_h - -/* Define to 1 if breeze is compiled against KDE4 */ -#cmakedefine01 BREEZE_COMMON_USE_KDE4 - -#endif diff --git a/screenshots/Desktop.png b/screenshots/Desktop.png deleted file mode 100644 index e69d473..0000000 Binary files a/screenshots/Desktop.png and /dev/null differ diff --git a/screenshots/Settings.png b/screenshots/Settings.png deleted file mode 100644 index 7726412..0000000 Binary files a/screenshots/Settings.png and /dev/null differ