diff options
1717 files changed, 8789 insertions, 4431 deletions
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index ee7350711..e744cb45f 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -14,6 +14,10 @@ # required stuff tde_setup_architecture_flags( ) + +include(TestBigEndian) +test_big_endian(WORDS_BIGENDIAN) + find_package( TQt ) find_package( TDE ) @@ -31,18 +35,36 @@ if( NOT HAVE_LIBDL ) endif( NOT HAVE_LIBDL ) +# stdint.h (drkonqi) +if( BUILD_DRKONQI ) + check_include_file( stdint.h HAVE_STDINT_H ) +endif( ) + + # termios.h (tdm, tdeioslave) if( BUILD_TDM OR BUILD_TDEIOSLAVES ) check_include_file( termios.h HAVE_TERMIOS_H ) endif( ) +# sys/bitypes.h (drkonqi) +if( BUILD_DRKONQI ) + check_include_file( sys/bitypes.h HAVE_SYS_BITYPES_H ) +endif( ) + + # sys/ioctl.h (tdeioslave/fish, kcontrol/info) if( BUILD_TDEIOSLAVES OR BUILD_KCONTROL ) check_include_file( sys/ioctl.h HAVE_SYS_IOCTL_H ) endif( ) +# sys/types.h (drkonqi, tdeioslave/smtp) +if( BUILD_DRKONQI OR BUILD_TDEIOSLAVES ) + check_include_file( sys/types.h HAVE_SYS_TYPES_H ) +endif( ) + + # pam if( WITH_PAM AND (BUILD_KCHECKPASS OR BUILD_TDM) ) check_library_exists( pam pam_start "" HAVE_PAM ) @@ -433,6 +455,19 @@ if( WITH_HAL AND (BUILD_KSMSERVER OR BUILD_KICKER OR BUILD_TDEIOSLAVES) ) endif( ) +# check for krb5 +if( WITH_KRB5 ) + pkg_search_module( KRB5 krb5 ) + if( NOT KRB5_FOUND ) + check_include_file( kadm5/admin.h HAVE_KRB_KADM_H ) + if( NOT HAVE_KRB_KADM_H ) + message(FATAL_ERROR "\nKerberos support was requested, but krb5 was not found on your system" ) + endif( NOT HAVE_KRB_KADM_H ) + endif( NOT KRB5_FOUND ) + set( HAVE_KRB5 1 ) + set( LIBTDELDAP_LIBRARIES "tdeldap" ) +endif( ) + # check for libr if( WITH_ELFICON ) pkg_search_module( LIBR libr ) diff --git a/cmake b/cmake -Subproject 0e0f4e9be4ce481304f4a9e7b0069af157425d7 +Subproject edad8a20b944d45f366acc15b2cd4d291ce3a5d diff --git a/config.h.cmake b/config.h.cmake index 6e27a2787..30828ca62 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -3,6 +3,10 @@ // Defined if you have fvisibility and fvisibility-inlines-hidden support. #cmakedefine __KDE_HAVE_GCC_VISIBILITY 1 +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#cmakedefine WORDS_BIGENDIAN @WORDS_BIGENDIAN@ + // Defined if compiler supports long long type. #cmakedefine HAVE_LONG_LONG 1 @@ -36,6 +40,9 @@ // libr #cmakedefine HAVE_ELFICON 1 +// krb5 +#cmakedefine HAVE_KRB5 1 + // libconfig #cmakedefine HAVE_LIBCONFIG 1 #cmakedefine HAVE_LIBCONFIG_OLD_API 1 @@ -43,6 +50,13 @@ // tdm, tdeioslave #cmakedefine HAVE_TERMIOS_H 1 +// drkonqi +#cmakedefine HAVE_STDINT_H 1 +#cmakedefine HAVE_SYS_BITYPES_H + +// drkonqi, tdeioslave +#cmakedefine HAVE_SYS_TYPES_H 1 + // tdeioslave/media #cmakedefine WITH_HAL 1 #ifdef WITH_HAL diff --git a/doc/kate/configdialog01.png b/doc/kate/configdialog01.png Binary files differindex 751066792..17e22d7c9 100644 --- a/doc/kate/configdialog01.png +++ b/doc/kate/configdialog01.png diff --git a/doc/kate/highlighted.png b/doc/kate/highlighted.png Binary files differindex ffb95ec48..3b9096f67 100644 --- a/doc/kate/highlighted.png +++ b/doc/kate/highlighted.png diff --git a/doc/kate/kate.png b/doc/kate/kate.png Binary files differindex dc1ee4c40..c642a6fa3 100644 --- a/doc/kate/kate.png +++ b/doc/kate/kate.png diff --git a/doc/kate/unhighlighted.png b/doc/kate/unhighlighted.png Binary files differindex 6361032f3..0ecffe1f7 100644 --- a/doc/kate/unhighlighted.png +++ b/doc/kate/unhighlighted.png diff --git a/doc/kcontrol/paths/paths.png b/doc/kcontrol/paths/paths.png Binary files differindex a9103687f..909281b4f 100644 --- a/doc/kcontrol/paths/paths.png +++ b/doc/kcontrol/paths/paths.png diff --git a/doc/kcontrol/screenshot.png b/doc/kcontrol/screenshot.png Binary files differindex 3a275cdb3..2caca5020 100644 --- a/doc/kcontrol/screenshot.png +++ b/doc/kcontrol/screenshot.png diff --git a/doc/kcontrol/useraccount/useraccount.png b/doc/kcontrol/useraccount/useraccount.png Binary files differindex 812313f27..957fd5425 100644 --- a/doc/kcontrol/useraccount/useraccount.png +++ b/doc/kcontrol/useraccount/useraccount.png diff --git a/doc/khelpcenter/background.png b/doc/khelpcenter/background.png Binary files differindex 2dda48e23..5a16f0297 100644 --- a/doc/khelpcenter/background.png +++ b/doc/khelpcenter/background.png diff --git a/doc/khelpcenter/bgtable.png b/doc/khelpcenter/bgtable.png Binary files differindex b52f2e6f2..519e933e6 100644 --- a/doc/khelpcenter/bgtable.png +++ b/doc/khelpcenter/bgtable.png diff --git a/doc/khelpcenter/kdelogo2.png b/doc/khelpcenter/kdelogo2.png Binary files differindex 08f5a1f1d..c64511da7 100644 --- a/doc/khelpcenter/kdelogo2.png +++ b/doc/khelpcenter/kdelogo2.png diff --git a/doc/khelpcenter/khelpcenter.png b/doc/khelpcenter/khelpcenter.png Binary files differindex e30c35825..ced2da612 100644 --- a/doc/khelpcenter/khelpcenter.png +++ b/doc/khelpcenter/khelpcenter.png diff --git a/doc/khelpcenter/lines.png b/doc/khelpcenter/lines.png Binary files differindex 498330c38..4a6d5ae85 100644 --- a/doc/khelpcenter/lines.png +++ b/doc/khelpcenter/lines.png diff --git a/doc/khelpcenter/lines2.png b/doc/khelpcenter/lines2.png Binary files differindex 02a8c05b5..bd0c45b1f 100644 --- a/doc/khelpcenter/lines2.png +++ b/doc/khelpcenter/lines2.png diff --git a/doc/khelpcenter/pointers.png b/doc/khelpcenter/pointers.png Binary files differindex 17bfb2eb8..8363b5502 100644 --- a/doc/khelpcenter/pointers.png +++ b/doc/khelpcenter/pointers.png diff --git a/doc/khelpcenter/shadow1.png b/doc/khelpcenter/shadow1.png Binary files differindex b57787697..535cd6e6d 100644 --- a/doc/khelpcenter/shadow1.png +++ b/doc/khelpcenter/shadow1.png diff --git a/doc/kicker/bookmarks_icon.png b/doc/kicker/bookmarks_icon.png Binary files differindex aa335b286..fcd70dc0b 100644 --- a/doc/kicker/bookmarks_icon.png +++ b/doc/kicker/bookmarks_icon.png diff --git a/doc/kicker/desktop_icon.png b/doc/kicker/desktop_icon.png Binary files differindex 5055c7df8..ce1104ee5 100644 --- a/doc/kicker/desktop_icon.png +++ b/doc/kicker/desktop_icon.png diff --git a/doc/kicker/k_menu_icon.png b/doc/kicker/k_menu_icon.png Binary files differindex 17535f876..d9930a366 100644 --- a/doc/kicker/k_menu_icon.png +++ b/doc/kicker/k_menu_icon.png diff --git a/doc/kicker/printsys_icon.png b/doc/kicker/printsys_icon.png Binary files differindex 13adbd006..9b4410d31 100644 --- a/doc/kicker/printsys_icon.png +++ b/doc/kicker/printsys_icon.png diff --git a/doc/kicker/quickbrowser_icon.png b/doc/kicker/quickbrowser_icon.png Binary files differindex fbc259e95..8c1ae5c1f 100644 --- a/doc/kicker/quickbrowser_icon.png +++ b/doc/kicker/quickbrowser_icon.png diff --git a/doc/kicker/recent_docs_icon.png b/doc/kicker/recent_docs_icon.png Binary files differindex 21f079bf4..af6efa104 100644 --- a/doc/kicker/recent_docs_icon.png +++ b/doc/kicker/recent_docs_icon.png diff --git a/doc/kicker/screenshot_left.png b/doc/kicker/screenshot_left.png Binary files differindex 8b29998ca..ac7dab87c 100644 --- a/doc/kicker/screenshot_left.png +++ b/doc/kicker/screenshot_left.png diff --git a/doc/kicker/screenshot_right.png b/doc/kicker/screenshot_right.png Binary files differindex b5bcee61c..a8ed04cd6 100644 --- a/doc/kicker/screenshot_right.png +++ b/doc/kicker/screenshot_right.png diff --git a/doc/kicker/taskbar_group.png b/doc/kicker/taskbar_group.png Binary files differindex e5484fe96..45bf885db 100644 --- a/doc/kicker/taskbar_group.png +++ b/doc/kicker/taskbar_group.png diff --git a/doc/kicker/terminals_icon.png b/doc/kicker/terminals_icon.png Binary files differindex de458c184..87e977ed6 100644 --- a/doc/kicker/terminals_icon.png +++ b/doc/kicker/terminals_icon.png diff --git a/doc/kicker/windowlist_icon.png b/doc/kicker/windowlist_icon.png Binary files differindex ca164a12a..f19da6616 100644 --- a/doc/kicker/windowlist_icon.png +++ b/doc/kicker/windowlist_icon.png diff --git a/doc/klipper/screenshot.png b/doc/klipper/screenshot.png Binary files differindex 2b1fbbafe..ea8c2337c 100644 --- a/doc/klipper/screenshot.png +++ b/doc/klipper/screenshot.png diff --git a/doc/kmenuedit/done.png b/doc/kmenuedit/done.png Binary files differindex c614475a7..a8f337ed1 100644 --- a/doc/kmenuedit/done.png +++ b/doc/kmenuedit/done.png diff --git a/doc/kmenuedit/itemname.png b/doc/kmenuedit/itemname.png Binary files differindex fb3d8a286..aff1cac44 100644 --- a/doc/kmenuedit/itemname.png +++ b/doc/kmenuedit/itemname.png diff --git a/doc/kmenuedit/kmenueditmain.png b/doc/kmenuedit/kmenueditmain.png Binary files differindex 46509372f..3b63eabc0 100644 --- a/doc/kmenuedit/kmenueditmain.png +++ b/doc/kmenuedit/kmenueditmain.png diff --git a/doc/kmenuedit/new.png b/doc/kmenuedit/new.png Binary files differindex a26a1dd41..dbc35126c 100644 --- a/doc/kmenuedit/new.png +++ b/doc/kmenuedit/new.png diff --git a/doc/kmenuedit/selecticon.png b/doc/kmenuedit/selecticon.png Binary files differindex c60363f37..8205d5f37 100644 --- a/doc/kmenuedit/selecticon.png +++ b/doc/kmenuedit/selecticon.png diff --git a/doc/kmenuedit/selectinternet.png b/doc/kmenuedit/selectinternet.png Binary files differindex 92d63b092..6dc323a71 100644 --- a/doc/kmenuedit/selectinternet.png +++ b/doc/kmenuedit/selectinternet.png diff --git a/doc/knetattach/screenshot.png b/doc/knetattach/screenshot.png Binary files differindex a22996512..a7bd5e272 100644 --- a/doc/knetattach/screenshot.png +++ b/doc/knetattach/screenshot.png diff --git a/doc/knetattach/screenshot1.png b/doc/knetattach/screenshot1.png Binary files differindex 1a9ef1001..e98cf6c16 100644 --- a/doc/knetattach/screenshot1.png +++ b/doc/knetattach/screenshot1.png diff --git a/doc/knetattach/screenshot2.png b/doc/knetattach/screenshot2.png Binary files differindex 581fa167c..42a586769 100644 --- a/doc/knetattach/screenshot2.png +++ b/doc/knetattach/screenshot2.png diff --git a/doc/knetattach/screenshot3.png b/doc/knetattach/screenshot3.png Binary files differindex 668d093e0..2f819b07e 100644 --- a/doc/knetattach/screenshot3.png +++ b/doc/knetattach/screenshot3.png diff --git a/doc/knetattach/screenshot4.png b/doc/knetattach/screenshot4.png Binary files differindex 13e375a05..1c14a557f 100644 --- a/doc/knetattach/screenshot4.png +++ b/doc/knetattach/screenshot4.png diff --git a/doc/konqueror/cmndline.png b/doc/konqueror/cmndline.png Binary files differindex 380fead0f..0d6cd433d 100644 --- a/doc/konqueror/cmndline.png +++ b/doc/konqueror/cmndline.png diff --git a/doc/konqueror/dirtree.png b/doc/konqueror/dirtree.png Binary files differindex fc20b2cc6..7d5539d94 100644 --- a/doc/konqueror/dirtree.png +++ b/doc/konqueror/dirtree.png diff --git a/doc/konqueror/dragdrop.png b/doc/konqueror/dragdrop.png Binary files differindex 8994a5c89..6afd9f2e5 100644 --- a/doc/konqueror/dragdrop.png +++ b/doc/konqueror/dragdrop.png diff --git a/doc/konqueror/konqorg.png b/doc/konqueror/konqorg.png Binary files differindex 0812aa045..50bc20aa3 100644 --- a/doc/konqueror/konqorg.png +++ b/doc/konqueror/konqorg.png diff --git a/doc/konqueror/parts.png b/doc/konqueror/parts.png Binary files differindex 1439d0b89..07b120e96 100644 --- a/doc/konqueror/parts.png +++ b/doc/konqueror/parts.png diff --git a/doc/konqueror/shortcut1.png b/doc/konqueror/shortcut1.png Binary files differindex 4d7a77c30..c229b9b67 100644 --- a/doc/konqueror/shortcut1.png +++ b/doc/konqueror/shortcut1.png diff --git a/doc/konqueror/shortcut2.png b/doc/konqueror/shortcut2.png Binary files differindex 7c461b417..a18a78bbc 100644 --- a/doc/konqueror/shortcut2.png +++ b/doc/konqueror/shortcut2.png diff --git a/doc/konsole/konsole.png b/doc/konsole/konsole.png Binary files differindex 8ec9a1b4e..54174bcbd 100644 --- a/doc/konsole/konsole.png +++ b/doc/konsole/konsole.png diff --git a/doc/konsole/tabbar.png b/doc/konsole/tabbar.png Binary files differindex fb0fb0dbe..4db0a1c2d 100644 --- a/doc/konsole/tabbar.png +++ b/doc/konsole/tabbar.png diff --git a/doc/kxkb/layout.png b/doc/kxkb/layout.png Binary files differindex dfb30cbf6..37847358f 100644 --- a/doc/kxkb/layout.png +++ b/doc/kxkb/layout.png diff --git a/doc/kxkb/switching.png b/doc/kxkb/switching.png Binary files differindex 504eaa7b2..edb3b2de1 100644 --- a/doc/kxkb/switching.png +++ b/doc/kxkb/switching.png diff --git a/doc/kxkb/xkb.png b/doc/kxkb/xkb.png Binary files differindex df2db58f7..9e26193bc 100644 --- a/doc/kxkb/xkb.png +++ b/doc/kxkb/xkb.png diff --git a/doc/tdefontview/tdefontview.png b/doc/tdefontview/tdefontview.png Binary files differindex 3f4c8adb3..8d4cc7d41 100644 --- a/doc/tdefontview/tdefontview.png +++ b/doc/tdefontview/tdefontview.png diff --git a/doc/tdeprint/cr32-action-wizard.png b/doc/tdeprint/cr32-action-wizard.png Binary files differindex b00db2499..210fd6397 100644 --- a/doc/tdeprint/cr32-action-wizard.png +++ b/doc/tdeprint/cr32-action-wizard.png diff --git a/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png b/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png Binary files differindex 9f5a73d39..74e9ec4c1 100644 --- a/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png +++ b/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png diff --git a/doc/tdeprint/cupsaddprinterwizard1.png b/doc/tdeprint/cupsaddprinterwizard1.png Binary files differindex cf20e087c..45e9adab3 100644 --- a/doc/tdeprint/cupsaddprinterwizard1.png +++ b/doc/tdeprint/cupsaddprinterwizard1.png diff --git a/doc/tdeprint/cupsaddprinterwizard2_backendselection.png b/doc/tdeprint/cupsaddprinterwizard2_backendselection.png Binary files differindex 3e4b2f126..fcbae3003 100644 --- a/doc/tdeprint/cupsaddprinterwizard2_backendselection.png +++ b/doc/tdeprint/cupsaddprinterwizard2_backendselection.png diff --git a/doc/tdeprint/cupsaddprinterwizard3_networkscan.png b/doc/tdeprint/cupsaddprinterwizard3_networkscan.png Binary files differindex 160834ee9..6373b38d4 100644 --- a/doc/tdeprint/cupsaddprinterwizard3_networkscan.png +++ b/doc/tdeprint/cupsaddprinterwizard3_networkscan.png diff --git a/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png b/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png Binary files differindex aa6cd87f1..fa4ca0381 100644 --- a/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png +++ b/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png diff --git a/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png b/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png Binary files differindex 7fff7de52..2eaea560f 100644 --- a/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png +++ b/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png diff --git a/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png b/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png Binary files differindex 391cf06ee..64f78c289 100644 --- a/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png +++ b/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png diff --git a/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png b/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png Binary files differindex f5767faad..331f1f008 100644 --- a/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png +++ b/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png diff --git a/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png b/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png Binary files differindex 3775f4d2a..6b782d20a 100644 --- a/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png +++ b/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png diff --git a/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png b/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png Binary files differindex d3ca6971f..1be8e2e08 100644 --- a/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png +++ b/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png diff --git a/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png b/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png Binary files differindex a662dd117..220ce6e12 100644 --- a/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png +++ b/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png diff --git a/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png b/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png Binary files differindex d9e9528d6..b5474a0c4 100644 --- a/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png +++ b/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png diff --git a/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png b/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png Binary files differindex 0030b4d7c..89f91259a 100644 --- a/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png +++ b/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png diff --git a/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png Binary files differindex fab7bc65b..bdf54ac5d 100644 --- a/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png +++ b/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png diff --git a/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png Binary files differindex 2cc4bf8ae..0ca243687 100644 --- a/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png +++ b/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png diff --git a/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png Binary files differindex cfd09e543..24b706574 100644 --- a/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png +++ b/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png diff --git a/doc/tdeprint/cupsserverconfiguration1_welcome.png b/doc/tdeprint/cupsserverconfiguration1_welcome.png Binary files differindex 50bd9ba3a..ea3f19a11 100644 --- a/doc/tdeprint/cupsserverconfiguration1_welcome.png +++ b/doc/tdeprint/cupsserverconfiguration1_welcome.png diff --git a/doc/tdeprint/cupsserverconfiguration2_general.png b/doc/tdeprint/cupsserverconfiguration2_general.png Binary files differindex c8e8b01c0..09d469769 100644 --- a/doc/tdeprint/cupsserverconfiguration2_general.png +++ b/doc/tdeprint/cupsserverconfiguration2_general.png diff --git a/doc/tdeprint/cupsserverconfiguration3_logging.png b/doc/tdeprint/cupsserverconfiguration3_logging.png Binary files differindex 300c31943..5a634cda0 100644 --- a/doc/tdeprint/cupsserverconfiguration3_logging.png +++ b/doc/tdeprint/cupsserverconfiguration3_logging.png diff --git a/doc/tdeprint/cupsserverconfiguration4_directories.png b/doc/tdeprint/cupsserverconfiguration4_directories.png Binary files differindex e55ab35fc..983c1764d 100644 --- a/doc/tdeprint/cupsserverconfiguration4_directories.png +++ b/doc/tdeprint/cupsserverconfiguration4_directories.png diff --git a/doc/tdeprint/cupsserverconfiguration5_HTTP.png b/doc/tdeprint/cupsserverconfiguration5_HTTP.png Binary files differindex 3e46eb17b..f52a9a3fd 100644 --- a/doc/tdeprint/cupsserverconfiguration5_HTTP.png +++ b/doc/tdeprint/cupsserverconfiguration5_HTTP.png diff --git a/doc/tdeprint/cupsserverconfiguration6_encryption.png b/doc/tdeprint/cupsserverconfiguration6_encryption.png Binary files differindex aca75adf0..85f380a0b 100644 --- a/doc/tdeprint/cupsserverconfiguration6_encryption.png +++ b/doc/tdeprint/cupsserverconfiguration6_encryption.png diff --git a/doc/tdeprint/cupsserverconfiguration7_miscellanious.png b/doc/tdeprint/cupsserverconfiguration7_miscellanious.png Binary files differindex 6a30d103e..0a493d79d 100644 --- a/doc/tdeprint/cupsserverconfiguration7_miscellanious.png +++ b/doc/tdeprint/cupsserverconfiguration7_miscellanious.png diff --git a/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png b/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png Binary files differindex a0a40da20..116c1c16f 100644 --- a/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png +++ b/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png diff --git a/doc/tdeprint/cupsserverconfiguration9_networkclients.png b/doc/tdeprint/cupsserverconfiguration9_networkclients.png Binary files differindex 89b30dfe9..028dfe117 100644 --- a/doc/tdeprint/cupsserverconfiguration9_networkclients.png +++ b/doc/tdeprint/cupsserverconfiguration9_networkclients.png diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png Binary files differindex 147830184..31e65fb21 100644 --- a/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png +++ b/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png Binary files differindex 295a0970a..8cfe3e425 100644 --- a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png +++ b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png Binary files differindex 3b3b4eb04..b01138a6e 100644 --- a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png +++ b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png b/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png Binary files differindex 1b388a6cb..f0a1f45b2 100644 --- a/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png +++ b/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png diff --git a/doc/tdeprint/cupsserverconfiguration_securityoverview.png b/doc/tdeprint/cupsserverconfiguration_securityoverview.png Binary files differindex bed1d3df6..b8f3c8958 100644 --- a/doc/tdeprint/cupsserverconfiguration_securityoverview.png +++ b/doc/tdeprint/cupsserverconfiguration_securityoverview.png diff --git a/doc/tdeprint/kcontrol-icon.png b/doc/tdeprint/kcontrol-icon.png Binary files differindex 8fbaacd79..47dae8e8f 100644 --- a/doc/tdeprint/kcontrol-icon.png +++ b/doc/tdeprint/kcontrol-icon.png diff --git a/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png b/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png Binary files differindex d7132b1cd..98b05d0de 100644 --- a/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png +++ b/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png diff --git a/doc/tdeprint/kcron_to_be_printed.png b/doc/tdeprint/kcron_to_be_printed.png Binary files differindex 114b26b3c..2a1c24cde 100644 --- a/doc/tdeprint/kcron_to_be_printed.png +++ b/doc/tdeprint/kcron_to_be_printed.png diff --git a/doc/tdeprint/kprinter-as-netscape-printcommand.png b/doc/tdeprint/kprinter-as-netscape-printcommand.png Binary files differindex 0780e2a80..b79d6194b 100644 --- a/doc/tdeprint/kprinter-as-netscape-printcommand.png +++ b/doc/tdeprint/kprinter-as-netscape-printcommand.png diff --git a/doc/tdeprint/kprinter-kivio.png b/doc/tdeprint/kprinter-kivio.png Binary files differindex b36b49b89..252c4ad97 100644 --- a/doc/tdeprint/kprinter-kivio.png +++ b/doc/tdeprint/kprinter-kivio.png diff --git a/doc/tdeprint/kprinter.png b/doc/tdeprint/kprinter.png Binary files differindex f83cfcd4b..e23b14ad4 100644 --- a/doc/tdeprint/kprinter.png +++ b/doc/tdeprint/kprinter.png diff --git a/doc/tdeprint/kprinter_called_from_run_command.png b/doc/tdeprint/kprinter_called_from_run_command.png Binary files differindex b02070c1d..c9921650c 100644 --- a/doc/tdeprint/kprinter_called_from_run_command.png +++ b/doc/tdeprint/kprinter_called_from_run_command.png diff --git a/doc/tdeprint/kprinter_with_kcron_developer_special.png b/doc/tdeprint/kprinter_with_kcron_developer_special.png Binary files differindex dc9b785cf..e8cd1dea2 100644 --- a/doc/tdeprint/kprinter_with_kcron_developer_special.png +++ b/doc/tdeprint/kprinter_with_kcron_developer_special.png diff --git a/doc/tdeprint/ps-boxes.png b/doc/tdeprint/ps-boxes.png Binary files differindex a24f845a7..cb4ea3839 100644 --- a/doc/tdeprint/ps-boxes.png +++ b/doc/tdeprint/ps-boxes.png diff --git a/doc/tdeprint/steinbruch_scaled.png b/doc/tdeprint/steinbruch_scaled.png Binary files differindex 57e6fde76..6c8003ecb 100644 --- a/doc/tdeprint/steinbruch_scaled.png +++ b/doc/tdeprint/steinbruch_scaled.png diff --git a/doc/tdeprint/tdeprint-jobviewer.png b/doc/tdeprint/tdeprint-jobviewer.png Binary files differindex 8182e4317..1c8b0bb71 100644 --- a/doc/tdeprint/tdeprint-jobviewer.png +++ b/doc/tdeprint/tdeprint-jobviewer.png diff --git a/doc/tdm/tsak.png b/doc/tdm/tsak.png Binary files differindex 0ccc3a34a..d4891818c 100644 --- a/doc/tdm/tsak.png +++ b/doc/tdm/tsak.png diff --git a/doc/userguide/a-window.png b/doc/userguide/a-window.png Binary files differindex 4008da52a..cfd93ddb4 100644 --- a/doc/userguide/a-window.png +++ b/doc/userguide/a-window.png diff --git a/doc/userguide/amarok-icon.png b/doc/userguide/amarok-icon.png Binary files differindex 07968313a..3a4191fe3 100644 --- a/doc/userguide/amarok-icon.png +++ b/doc/userguide/amarok-icon.png diff --git a/doc/userguide/amarok.png b/doc/userguide/amarok.png Binary files differindex ddcb285bc..1affe7f29 100644 --- a/doc/userguide/amarok.png +++ b/doc/userguide/amarok.png diff --git a/doc/userguide/desktop.png b/doc/userguide/desktop.png Binary files differindex a7c258675..c9e03af97 100644 --- a/doc/userguide/desktop.png +++ b/doc/userguide/desktop.png diff --git a/doc/userguide/juk-icon.png b/doc/userguide/juk-icon.png Binary files differindex 2b58a33d3..a9b9150aa 100644 --- a/doc/userguide/juk-icon.png +++ b/doc/userguide/juk-icon.png diff --git a/doc/userguide/juk.png b/doc/userguide/juk.png Binary files differindex 9ec3ae91e..3c5517cb8 100644 --- a/doc/userguide/juk.png +++ b/doc/userguide/juk.png diff --git a/doc/userguide/kaboodle-icon.png b/doc/userguide/kaboodle-icon.png Binary files differindex 87ac58b8c..7737031df 100644 --- a/doc/userguide/kaboodle-icon.png +++ b/doc/userguide/kaboodle-icon.png diff --git a/doc/userguide/kaboodle.png b/doc/userguide/kaboodle.png Binary files differindex dbbcfd923..ca64fee01 100644 --- a/doc/userguide/kaboodle.png +++ b/doc/userguide/kaboodle.png diff --git a/doc/userguide/kcalc-systray.png b/doc/userguide/kcalc-systray.png Binary files differindex 5e0ac5cc5..c36073d3c 100644 --- a/doc/userguide/kcalc-systray.png +++ b/doc/userguide/kcalc-systray.png diff --git a/doc/userguide/kcontrol.png b/doc/userguide/kcontrol.png Binary files differindex 3de78f3f8..d09af9aef 100644 --- a/doc/userguide/kcontrol.png +++ b/doc/userguide/kcontrol.png diff --git a/doc/userguide/kmag.png b/doc/userguide/kmag.png Binary files differindex cba958528..0b9de2399 100644 --- a/doc/userguide/kmag.png +++ b/doc/userguide/kmag.png diff --git a/doc/userguide/kmousetool.png b/doc/userguide/kmousetool.png Binary files differindex 371f041ae..fe5dfb6a2 100644 --- a/doc/userguide/kmousetool.png +++ b/doc/userguide/kmousetool.png diff --git a/doc/userguide/kmouth.png b/doc/userguide/kmouth.png Binary files differindex c5507eaba..ebc59d291 100644 --- a/doc/userguide/kmouth.png +++ b/doc/userguide/kmouth.png diff --git a/doc/userguide/kmouth2.png b/doc/userguide/kmouth2.png Binary files differindex 6cf0e613e..3e435b772 100644 --- a/doc/userguide/kmouth2.png +++ b/doc/userguide/kmouth2.png diff --git a/doc/userguide/kmouth3.png b/doc/userguide/kmouth3.png Binary files differindex 8bed5a532..63a52ef65 100644 --- a/doc/userguide/kmouth3.png +++ b/doc/userguide/kmouth3.png diff --git a/doc/userguide/knode-identity.png b/doc/userguide/knode-identity.png Binary files differindex c9f63347f..7039f440a 100644 --- a/doc/userguide/knode-identity.png +++ b/doc/userguide/knode-identity.png diff --git a/doc/userguide/knode-mail-account.png b/doc/userguide/knode-mail-account.png Binary files differindex f2271662f..d8dc560a2 100644 --- a/doc/userguide/knode-mail-account.png +++ b/doc/userguide/knode-mail-account.png diff --git a/doc/userguide/knode-news-account.png b/doc/userguide/knode-news-account.png Binary files differindex e046870f1..66eb4adec 100644 --- a/doc/userguide/knode-news-account.png +++ b/doc/userguide/knode-news-account.png diff --git a/doc/userguide/knode-start.png b/doc/userguide/knode-start.png Binary files differindex 1057f946b..709978a9c 100644 --- a/doc/userguide/knode-start.png +++ b/doc/userguide/knode-start.png diff --git a/doc/userguide/konq-sidebar.png b/doc/userguide/konq-sidebar.png Binary files differindex ee099be67..d58cdda3b 100644 --- a/doc/userguide/konq-sidebar.png +++ b/doc/userguide/konq-sidebar.png diff --git a/doc/userguide/konq-simple.png b/doc/userguide/konq-simple.png Binary files differindex 6a1c0fa63..b2f40fda8 100644 --- a/doc/userguide/konq-simple.png +++ b/doc/userguide/konq-simple.png diff --git a/doc/userguide/kopete.png b/doc/userguide/kopete.png Binary files differindex 446a26655..6d1fb850b 100644 --- a/doc/userguide/kopete.png +++ b/doc/userguide/kopete.png diff --git a/doc/userguide/kppp-dialer-tab.png b/doc/userguide/kppp-dialer-tab.png Binary files differindex bb344979f..174248710 100644 --- a/doc/userguide/kppp-dialer-tab.png +++ b/doc/userguide/kppp-dialer-tab.png diff --git a/doc/userguide/kppp-wizard.png b/doc/userguide/kppp-wizard.png Binary files differindex cbb731fcb..5e720df9a 100644 --- a/doc/userguide/kppp-wizard.png +++ b/doc/userguide/kppp-wizard.png diff --git a/doc/userguide/noatun-icon.png b/doc/userguide/noatun-icon.png Binary files differindex c440d0924..15131ce39 100644 --- a/doc/userguide/noatun-icon.png +++ b/doc/userguide/noatun-icon.png diff --git a/doc/userguide/noatun.png b/doc/userguide/noatun.png Binary files differindex 2f807e715..9d0d2d764 100644 --- a/doc/userguide/noatun.png +++ b/doc/userguide/noatun.png diff --git a/doc/userguide/oggfolder.png b/doc/userguide/oggfolder.png Binary files differindex ac1527c32..130fc63b7 100644 --- a/doc/userguide/oggfolder.png +++ b/doc/userguide/oggfolder.png diff --git a/doc/userguide/open-file-dialog.png b/doc/userguide/open-file-dialog.png Binary files differindex 38378aa0c..2ebd2b254 100644 --- a/doc/userguide/open-file-dialog.png +++ b/doc/userguide/open-file-dialog.png diff --git a/doc/userguide/rip.png b/doc/userguide/rip.png Binary files differindex 0a044efb9..b1461a979 100644 --- a/doc/userguide/rip.png +++ b/doc/userguide/rip.png diff --git a/doc/userguide/ripsettings.png b/doc/userguide/ripsettings.png Binary files differindex 21f53fbfd..e4e50addb 100644 --- a/doc/userguide/ripsettings.png +++ b/doc/userguide/ripsettings.png diff --git a/doc/userguide/services.png b/doc/userguide/services.png Binary files differindex d281c88b7..7ccd315d4 100644 --- a/doc/userguide/services.png +++ b/doc/userguide/services.png diff --git a/doc/userguide/splash-screen.png b/doc/userguide/splash-screen.png Binary files differindex 048b1e460..cd11c5d35 100644 --- a/doc/userguide/splash-screen.png +++ b/doc/userguide/splash-screen.png diff --git a/doc/userguide/tdm.png b/doc/userguide/tdm.png Binary files differindex c189ec780..1ad4fcce0 100644 --- a/doc/userguide/tdm.png +++ b/doc/userguide/tdm.png diff --git a/doc/userguide/titlebar-menu.png b/doc/userguide/titlebar-menu.png Binary files differindex 8f24d9580..d772e7995 100644 --- a/doc/userguide/titlebar-menu.png +++ b/doc/userguide/titlebar-menu.png diff --git a/doc/visualdict/pict1.png b/doc/visualdict/pict1.png Binary files differindex de9cf8695..2a0d11097 100644 --- a/doc/visualdict/pict1.png +++ b/doc/visualdict/pict1.png diff --git a/doc/visualdict/pict10.png b/doc/visualdict/pict10.png Binary files differindex 4d526ca74..ff0748ac7 100644 --- a/doc/visualdict/pict10.png +++ b/doc/visualdict/pict10.png diff --git a/doc/visualdict/pict11.png b/doc/visualdict/pict11.png Binary files differindex 5968a7a2d..e2b33ea3d 100644 --- a/doc/visualdict/pict11.png +++ b/doc/visualdict/pict11.png diff --git a/doc/visualdict/pict12.png b/doc/visualdict/pict12.png Binary files differindex 49643c607..69e958c00 100644 --- a/doc/visualdict/pict12.png +++ b/doc/visualdict/pict12.png diff --git a/doc/visualdict/pict13.png b/doc/visualdict/pict13.png Binary files differindex 26a615502..f70b40a75 100644 --- a/doc/visualdict/pict13.png +++ b/doc/visualdict/pict13.png diff --git a/doc/visualdict/pict14.png b/doc/visualdict/pict14.png Binary files differindex 1f32bfe83..491505064 100644 --- a/doc/visualdict/pict14.png +++ b/doc/visualdict/pict14.png diff --git a/doc/visualdict/pict15.png b/doc/visualdict/pict15.png Binary files differindex 6fc7a5ca2..81deaace4 100644 --- a/doc/visualdict/pict15.png +++ b/doc/visualdict/pict15.png diff --git a/doc/visualdict/pict16.png b/doc/visualdict/pict16.png Binary files differindex c5692e751..acb85b32c 100644 --- a/doc/visualdict/pict16.png +++ b/doc/visualdict/pict16.png diff --git a/doc/visualdict/pict17.png b/doc/visualdict/pict17.png Binary files differindex a49a9a271..c5bfab766 100644 --- a/doc/visualdict/pict17.png +++ b/doc/visualdict/pict17.png diff --git a/doc/visualdict/pict18.png b/doc/visualdict/pict18.png Binary files differindex 0853ddb52..eb7fc172f 100644 --- a/doc/visualdict/pict18.png +++ b/doc/visualdict/pict18.png diff --git a/doc/visualdict/pict19.png b/doc/visualdict/pict19.png Binary files differindex e366a3da1..22c841137 100644 --- a/doc/visualdict/pict19.png +++ b/doc/visualdict/pict19.png diff --git a/doc/visualdict/pict2.png b/doc/visualdict/pict2.png Binary files differindex 87724f8ea..69c64624a 100644 --- a/doc/visualdict/pict2.png +++ b/doc/visualdict/pict2.png diff --git a/doc/visualdict/pict20.png b/doc/visualdict/pict20.png Binary files differindex 82c4a738e..fac840877 100644 --- a/doc/visualdict/pict20.png +++ b/doc/visualdict/pict20.png diff --git a/doc/visualdict/pict21.png b/doc/visualdict/pict21.png Binary files differindex 573c7a2a0..70f148c4e 100644 --- a/doc/visualdict/pict21.png +++ b/doc/visualdict/pict21.png diff --git a/doc/visualdict/pict22.png b/doc/visualdict/pict22.png Binary files differindex 052be0b83..cc29e0f14 100644 --- a/doc/visualdict/pict22.png +++ b/doc/visualdict/pict22.png diff --git a/doc/visualdict/pict23.png b/doc/visualdict/pict23.png Binary files differindex 1e09a5787..0d3844382 100644 --- a/doc/visualdict/pict23.png +++ b/doc/visualdict/pict23.png diff --git a/doc/visualdict/pict3.png b/doc/visualdict/pict3.png Binary files differindex 124986e53..6a053a7ac 100644 --- a/doc/visualdict/pict3.png +++ b/doc/visualdict/pict3.png diff --git a/doc/visualdict/pict4.png b/doc/visualdict/pict4.png Binary files differindex 498ca7212..88f4b85c4 100644 --- a/doc/visualdict/pict4.png +++ b/doc/visualdict/pict4.png diff --git a/doc/visualdict/pict5.png b/doc/visualdict/pict5.png Binary files differindex f383ca563..ec4b70f7a 100644 --- a/doc/visualdict/pict5.png +++ b/doc/visualdict/pict5.png diff --git a/doc/visualdict/pict6.png b/doc/visualdict/pict6.png Binary files differindex 542b2f278..e5e1da4a8 100644 --- a/doc/visualdict/pict6.png +++ b/doc/visualdict/pict6.png diff --git a/doc/visualdict/pict7.png b/doc/visualdict/pict7.png Binary files differindex 4ed9d6074..bfe63c9e5 100644 --- a/doc/visualdict/pict7.png +++ b/doc/visualdict/pict7.png diff --git a/doc/visualdict/pict8.png b/doc/visualdict/pict8.png Binary files differindex 6f896ea4b..805b07964 100644 --- a/doc/visualdict/pict8.png +++ b/doc/visualdict/pict8.png diff --git a/doc/visualdict/pict9.png b/doc/visualdict/pict9.png Binary files differindex 9a4aac405..d8a4be594 100644 --- a/doc/visualdict/pict9.png +++ b/doc/visualdict/pict9.png diff --git a/drkonqi/pics/konqi.png b/drkonqi/pics/konqi.png Binary files differindex 02e75941e..9c5764c6f 100644 --- a/drkonqi/pics/konqi.png +++ b/drkonqi/pics/konqi.png diff --git a/kappfinder/hi128-app-kappfinder.png b/kappfinder/hi128-app-kappfinder.png Binary files differindex c0ccc13b3..26bbb53b6 100644 --- a/kappfinder/hi128-app-kappfinder.png +++ b/kappfinder/hi128-app-kappfinder.png diff --git a/kappfinder/hi16-app-kappfinder.png b/kappfinder/hi16-app-kappfinder.png Binary files differindex 38f2cc76e..6eacf2a7a 100644 --- a/kappfinder/hi16-app-kappfinder.png +++ b/kappfinder/hi16-app-kappfinder.png diff --git a/kappfinder/hi22-app-kappfinder.png b/kappfinder/hi22-app-kappfinder.png Binary files differindex 82a409e0d..6a6f2559b 100644 --- a/kappfinder/hi22-app-kappfinder.png +++ b/kappfinder/hi22-app-kappfinder.png diff --git a/kappfinder/hi32-app-kappfinder.png b/kappfinder/hi32-app-kappfinder.png Binary files differindex 8fe3e1a20..590ba87b9 100644 --- a/kappfinder/hi32-app-kappfinder.png +++ b/kappfinder/hi32-app-kappfinder.png diff --git a/kappfinder/hi48-app-kappfinder.png b/kappfinder/hi48-app-kappfinder.png Binary files differindex ef971fc10..f40858056 100644 --- a/kappfinder/hi48-app-kappfinder.png +++ b/kappfinder/hi48-app-kappfinder.png diff --git a/kappfinder/hi64-app-kappfinder.png b/kappfinder/hi64-app-kappfinder.png Binary files differindex b1a66176d..349b8ff49 100644 --- a/kappfinder/hi64-app-kappfinder.png +++ b/kappfinder/hi64-app-kappfinder.png diff --git a/kate/pics/actions/cr16-action-curfiledir.png b/kate/pics/actions/cr16-action-curfiledir.png Binary files differindex 9b85f8c9f..695ad2213 100644 --- a/kate/pics/actions/cr16-action-curfiledir.png +++ b/kate/pics/actions/cr16-action-curfiledir.png diff --git a/kate/pics/actions/cr16-action-highlighting.png b/kate/pics/actions/cr16-action-highlighting.png Binary files differindex a204bfddf..3bd4f8043 100644 --- a/kate/pics/actions/cr16-action-highlighting.png +++ b/kate/pics/actions/cr16-action-highlighting.png diff --git a/kate/pics/actions/cr16-action-modified.png b/kate/pics/actions/cr16-action-modified.png Binary files differindex 41b3f4367..c4e7831da 100644 --- a/kate/pics/actions/cr16-action-modified.png +++ b/kate/pics/actions/cr16-action-modified.png diff --git a/kate/pics/actions/cr16-action-modmod.png b/kate/pics/actions/cr16-action-modmod.png Binary files differindex 888024d07..d0d82f721 100644 --- a/kate/pics/actions/cr16-action-modmod.png +++ b/kate/pics/actions/cr16-action-modmod.png diff --git a/kate/pics/actions/cr16-action-modonhd.png b/kate/pics/actions/cr16-action-modonhd.png Binary files differindex 4ffdef7f3..22876cdda 100644 --- a/kate/pics/actions/cr16-action-modonhd.png +++ b/kate/pics/actions/cr16-action-modonhd.png diff --git a/kate/pics/actions/cr16-action-null.png b/kate/pics/actions/cr16-action-null.png Binary files differindex 021451f7f..c06ca5543 100644 --- a/kate/pics/actions/cr16-action-null.png +++ b/kate/pics/actions/cr16-action-null.png diff --git a/kate/pics/actions/cr32-action-highlighting.png b/kate/pics/actions/cr32-action-highlighting.png Binary files differindex 5c8232f79..6801f9b5d 100644 --- a/kate/pics/actions/cr32-action-highlighting.png +++ b/kate/pics/actions/cr32-action-highlighting.png diff --git a/kate/pics/actions/lo16-action-curfiledir.png b/kate/pics/actions/lo16-action-curfiledir.png Binary files differindex b68a03b17..189695281 100644 --- a/kate/pics/actions/lo16-action-curfiledir.png +++ b/kate/pics/actions/lo16-action-curfiledir.png diff --git a/kate/pics/actions/lo16-action-indent.png b/kate/pics/actions/lo16-action-indent.png Binary files differindex ab7ee7593..fa5151758 100644 --- a/kate/pics/actions/lo16-action-indent.png +++ b/kate/pics/actions/lo16-action-indent.png diff --git a/kate/pics/actions/lo16-action-modified.png b/kate/pics/actions/lo16-action-modified.png Binary files differindex 6edb6969f..84d034557 100644 --- a/kate/pics/actions/lo16-action-modified.png +++ b/kate/pics/actions/lo16-action-modified.png diff --git a/kate/pics/actions/lo16-action-modmod.png b/kate/pics/actions/lo16-action-modmod.png Binary files differindex 652d87d26..65b5ad428 100644 --- a/kate/pics/actions/lo16-action-modmod.png +++ b/kate/pics/actions/lo16-action-modmod.png diff --git a/kate/pics/actions/lo16-action-modonhd.png b/kate/pics/actions/lo16-action-modonhd.png Binary files differindex 79e5791c6..ed063e22f 100644 --- a/kate/pics/actions/lo16-action-modonhd.png +++ b/kate/pics/actions/lo16-action-modonhd.png diff --git a/kate/pics/actions/lo16-action-null.png b/kate/pics/actions/lo16-action-null.png Binary files differindex 021451f7f..c06ca5543 100644 --- a/kate/pics/actions/lo16-action-null.png +++ b/kate/pics/actions/lo16-action-null.png diff --git a/kate/pics/actions/lo16-action-unindent.png b/kate/pics/actions/lo16-action-unindent.png Binary files differindex 119e76344..ca8b0ef9e 100644 --- a/kate/pics/actions/lo16-action-unindent.png +++ b/kate/pics/actions/lo16-action-unindent.png diff --git a/kate/pics/actions/lo22-action-indent.png b/kate/pics/actions/lo22-action-indent.png Binary files differindex 8eba60153..472dfaab4 100644 --- a/kate/pics/actions/lo22-action-indent.png +++ b/kate/pics/actions/lo22-action-indent.png diff --git a/kate/pics/actions/lo22-action-unindent.png b/kate/pics/actions/lo22-action-unindent.png Binary files differindex 26a013d7f..5df8da2d4 100644 --- a/kate/pics/actions/lo22-action-unindent.png +++ b/kate/pics/actions/lo22-action-unindent.png diff --git a/kate/pics/hi128-app-kate.png b/kate/pics/hi128-app-kate.png Binary files differindex dfa6aec3f..746a83dda 100644 --- a/kate/pics/hi128-app-kate.png +++ b/kate/pics/hi128-app-kate.png diff --git a/kate/pics/hi128-app-kwrite.png b/kate/pics/hi128-app-kwrite.png Binary files differindex fd4db26dc..cbf02bda7 100644 --- a/kate/pics/hi128-app-kwrite.png +++ b/kate/pics/hi128-app-kwrite.png diff --git a/kate/pics/hi16-app-kate.png b/kate/pics/hi16-app-kate.png Binary files differindex 3c939e637..2a70ccd67 100644 --- a/kate/pics/hi16-app-kate.png +++ b/kate/pics/hi16-app-kate.png diff --git a/kate/pics/hi16-app-kwrite.png b/kate/pics/hi16-app-kwrite.png Binary files differindex 3c939e637..2a70ccd67 100644 --- a/kate/pics/hi16-app-kwrite.png +++ b/kate/pics/hi16-app-kwrite.png diff --git a/kate/pics/hi22-app-kate.png b/kate/pics/hi22-app-kate.png Binary files differindex 29c225bea..48ac96de9 100644 --- a/kate/pics/hi22-app-kate.png +++ b/kate/pics/hi22-app-kate.png diff --git a/kate/pics/hi22-app-kwrite.png b/kate/pics/hi22-app-kwrite.png Binary files differindex 29c225bea..48ac96de9 100644 --- a/kate/pics/hi22-app-kwrite.png +++ b/kate/pics/hi22-app-kwrite.png diff --git a/kate/pics/hi32-app-kate.png b/kate/pics/hi32-app-kate.png Binary files differindex e4185bfe6..64101d840 100644 --- a/kate/pics/hi32-app-kate.png +++ b/kate/pics/hi32-app-kate.png diff --git a/kate/pics/hi32-app-kwrite.png b/kate/pics/hi32-app-kwrite.png Binary files differindex e4185bfe6..64101d840 100644 --- a/kate/pics/hi32-app-kwrite.png +++ b/kate/pics/hi32-app-kwrite.png diff --git a/kate/pics/hi48-app-kate.png b/kate/pics/hi48-app-kate.png Binary files differindex 08c72efab..994e81d03 100644 --- a/kate/pics/hi48-app-kate.png +++ b/kate/pics/hi48-app-kate.png diff --git a/kate/pics/hi48-app-kwrite.png b/kate/pics/hi48-app-kwrite.png Binary files differindex 08c72efab..994e81d03 100644 --- a/kate/pics/hi48-app-kwrite.png +++ b/kate/pics/hi48-app-kwrite.png diff --git a/kate/pics/hi64-app-kate.png b/kate/pics/hi64-app-kate.png Binary files differindex c553a93c2..378f0931b 100644 --- a/kate/pics/hi64-app-kate.png +++ b/kate/pics/hi64-app-kate.png diff --git a/kate/pics/hi64-app-kwrite.png b/kate/pics/hi64-app-kwrite.png Binary files differindex c553a93c2..378f0931b 100644 --- a/kate/pics/hi64-app-kwrite.png +++ b/kate/pics/hi64-app-kwrite.png diff --git a/kate/pics/sessionchooser.png b/kate/pics/sessionchooser.png Binary files differindex b098af19e..85132358c 100644 --- a/kate/pics/sessionchooser.png +++ b/kate/pics/sessionchooser.png diff --git a/kcheckpass/checkpass_pam.c b/kcheckpass/checkpass_pam.c index 7a35eeddf..b11148cee 100644 --- a/kcheckpass/checkpass_pam.c +++ b/kcheckpass/checkpass_pam.c @@ -72,8 +72,20 @@ PAM_conv (int num_msg, pam_message_type **msg, repl[count].resp = pd->conv(ConvGetNormal, msg[count]->msg); break; case PAM_PROMPT_ECHO_OFF: - repl[count].resp = - pd->conv(ConvGetHidden, pd->classic ? 0 : msg[count]->msg); + if (pd->classic) { + // WARNING + // This is far from foolproof, but it's the best we can do at this time... + // Try to detect PIN entry requests + if (strstr(msg[count]->msg, "PIN")) { + repl[count].resp = pd->conv(ConvGetHidden, msg[count]->msg); + } + else { + repl[count].resp = pd->conv(ConvGetHidden, 0); + } + } + else { + repl[count].resp = pd->conv(ConvGetHidden, msg[count]->msg); + } break; #ifdef PAM_BINARY_PROMPT case PAM_BINARY_PROMPT: diff --git a/kcontrol/background/pics/monitor.png b/kcontrol/background/pics/monitor.png Binary files differindex ecd86b9e4..6ef8f32b9 100644 --- a/kcontrol/background/pics/monitor.png +++ b/kcontrol/background/pics/monitor.png diff --git a/kcontrol/crypto/CMakeLists.txt b/kcontrol/crypto/CMakeLists.txt index 414e6d605..9a7f9161d 100644 --- a/kcontrol/crypto/CMakeLists.txt +++ b/kcontrol/crypto/CMakeLists.txt @@ -16,7 +16,15 @@ option( WITH_SSL "Enable support for SSL" ON ) if( WITH_SSL ) pkg_search_module( SSL openssl ) if( NOT SSL_FOUND ) - tde_message_fatal( "SSL support are requested, but openssl is not found on your system" ) + check_include_file( openssl/ssl.h HAVE_OPENSSL_H ) + check_library_exists( ssl SSL_library_init "" HAVE_LIBSSL ) + check_library_exists( crypto EVP_EncryptInit_ex "" HAVE_LIBCRYPTO ) + if( HAVE_OPENSSL_H AND HAVE_LIBSSL AND HAVE_LIBCRYPTO ) + set( SSL_FOUND 1 CACHE INTERNAL "" FORCE ) + endif( HAVE_OPENSSL_H AND HAVE_LIBSSL AND HAVE_LIBCRYPTO ) + endif( NOT SSL_FOUND ) + if( NOT SSL_FOUND ) + tde_message_fatal( "SSL support is requested, but openssl not found on your system" ) endif( NOT SSL_FOUND ) set( HAVE_SSL 1 CACHE INTERNAL "" FORCE ) endif( WITH_SSL ) @@ -44,6 +52,6 @@ install( FILES crypto.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) tde_add_kpart( kcm_crypto AUTOMOC SOURCES crypto.cpp certexport.cpp kdatetimedlg.cpp - LINK tdeio-shared ${SSL_LIBRARIES} + LINK tdeio-shared DESTINATION ${PLUGIN_INSTALL_DIR} ) diff --git a/kcontrol/crypto/crypto.cpp b/kcontrol/crypto/crypto.cpp index 329c04a31..55536b21e 100644 --- a/kcontrol/crypto/crypto.cpp +++ b/kcontrol/crypto/crypto.cpp @@ -878,13 +878,17 @@ void KCryptoConfig::load( bool useDefaults ) config->setGroup("SSLv2"); mUseSSLv2->setChecked(config->readBoolEntry("Enabled", true)); -#ifdef OPENSSL_NO_SSL2 +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(OPENSSL_NO_SSL2) mUseSSLv2->setChecked(false); mUseSSLv2->setEnabled(false); #endif config->setGroup("SSLv3"); mUseSSLv3->setChecked(config->readBoolEntry("Enabled", true)); +#if defined(OPENSSL_NO_SSL3) + mUseSSLv3->setChecked(false); + mUseSSLv3->setEnabled(false); +#endif config->setGroup("Warnings"); mWarnOnEnter->setChecked(config->readBoolEntry("OnEnter", false)); @@ -933,12 +937,16 @@ void KCryptoConfig::load( bool useDefaults ) item = static_cast<CipherItem *>(item->nextSibling()); } -#ifdef OPENSSL_NO_SSL2 +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(OPENSSL_NO_SSL2) SSLv2Box->setEnabled( false ); #else SSLv2Box->setEnabled( mUseSSLv2->isChecked() ); #endif +#if defined(OPENSSL_NO_SSL3) + SSLv3Box->setEnabled( false ); +#else SSLv3Box->setEnabled( mUseSSLv3->isChecked() ); +#endif TQStringList groups = policies->groupList(); @@ -1038,7 +1046,8 @@ void KCryptoConfig::load( bool useDefaults ) void KCryptoConfig::save() { #ifdef HAVE_SSL - if (!mUseSSLv2->isChecked() && + if (!mUseTLS->isChecked() && + !mUseSSLv2->isChecked() && !mUseSSLv3->isChecked()) KMessageBox::information(this, i18n("If you do not select at least one" " SSL algorithm, either SSL will not" @@ -1050,14 +1059,18 @@ void KCryptoConfig::save() config->writeEntry("Enabled", mUseTLS->isChecked()); config->setGroup("SSLv2"); -#ifdef OPENSSL_NO_SSL2 +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(OPENSSL_NO_SSL2) config->writeEntry("Enabled", false); #else config->writeEntry("Enabled", mUseSSLv2->isChecked()); #endif config->setGroup("SSLv3"); +#if defined(OPENSSL_NO_SSL3) + config->writeEntry("Enabled", false); +#else config->writeEntry("Enabled", mUseSSLv3->isChecked()); +#endif config->setGroup("Warnings"); config->writeEntry("OnEnter", mWarnOnEnter->isChecked()); @@ -1293,12 +1306,16 @@ void KCryptoConfig::cwCompatible() { } mUseTLS->setChecked(true); -#ifdef OPENSSL_NO_SSL2 +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(OPENSSL_NO_SSL2) mUseSSLv2->setChecked(false); #else mUseSSLv2->setChecked(true); #endif +#if defined(OPENSSL_NO_SSL3) + mUseSSLv3->setChecked(false); +#else mUseSSLv3->setChecked(true); +#endif configChanged(); #endif } @@ -1354,12 +1371,16 @@ void KCryptoConfig::cwAll() { } mUseTLS->setChecked(true); -#ifdef OPENSSL_NO_SSL2 +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(OPENSSL_NO_SSL2) mUseSSLv2->setChecked(false); #else mUseSSLv2->setChecked(true); #endif +#if defined(OPENSSL_NO_SSL3) + mUseSSLv3->setChecked(false); +#else mUseSSLv3->setChecked(true); +#endif configChanged(); #endif } @@ -1875,9 +1896,6 @@ void KCryptoConfig::slotCAImport() { return; #ifdef HAVE_SSL -#define sk_free KOSSL::self()->sk_free -#define sk_num KOSSL::self()->sk_num -#define sk_value KOSSL::self()->sk_value // First try to load using the OpenSSL method X509_STORE *certStore = KOSSL::self()->X509_STORE_new(); @@ -1887,13 +1905,14 @@ void KCryptoConfig::slotCAImport() { KOSSL::self()->X509_LOOKUP_load_file(certLookup, certFile.local8Bit(), X509_FILETYPE_PEM)) { - for (int i = 0; i < sk_X509_OBJECT_num(certStore->objs); i++) { - X509_OBJECT* x5o = sk_X509_OBJECT_value(certStore->objs, i); + STACK_OF(X509_OBJECT) *certStore_objs = KOSSL::self()->X509_STORE_get0_objects(certStore); + for (int i = 0; i < KOSSL::self()->OPENSSL_sk_num(certStore_objs); i++) { + X509_OBJECT* x5o = reinterpret_cast<X509_OBJECT*>(KOSSL::self()->OPENSSL_sk_value(certStore_objs, i)); if (!x5o) continue; - if (x5o->type != X509_LU_X509) continue; + if (KOSSL::self()->X509_OBJECT_get_type(x5o) != X509_LU_X509) continue; - X509 *x5 = x5o->data.x509; + X509 *x5 = KOSSL::self()->X509_OBJECT_get0_X509(x5o); if (!x5) continue; // Easier to use in this form @@ -1957,7 +1976,7 @@ void KCryptoConfig::slotCAImport() { qf.open(IO_ReadOnly); qf.readLine(certtext, qf.size()); - if (certStore) { KOSSL::self()->X509_STORE_free(certStore); + if (certStore) { KOSSL::self()->OPENSSL_sk_free(certStore); certStore = NULL; } if (certtext.contains("-----BEGIN CERTIFICATE-----")) { @@ -2029,12 +2048,9 @@ void KCryptoConfig::slotCAImport() { } - if (certStore) KOSSL::self()->X509_STORE_free(certStore); + if (certStore) KOSSL::self()->OPENSSL_sk_free(certStore); configChanged(); -#undef sk_free -#undef sk_num -#undef sk_value #endif offerImportToKMail( certFile ); @@ -2356,81 +2372,76 @@ void KCryptoConfig::slotGeneratePersonal() { #ifdef HAVE_SSL -#if OPENSSL_VERSION_NUMBER >= 0x10000000L -#define SSL_CONST const -#else -#define SSL_CONST -#endif - // This gets all the available ciphers from OpenSSL bool KCryptoConfig::loadCiphers() { -unsigned int i; +unsigned int i, cnt; SSL_CTX *ctx; SSL *ssl; -SSL_CONST SSL_METHOD *meth; +SSL_METHOD *meth; +STACK_OF(SSL_CIPHER)* sk; SSLv2Box->clear(); SSLv3Box->clear(); + CipherItem *item; -#ifndef OPENSSL_NO_SSL2 - meth = SSLv2_client_method(); - SSLeay_add_ssl_algorithms(); - ctx = SSL_CTX_new(meth); +#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(OPENSSL_NO_SSL2) + meth = KOSSL::self()->SSLv2_client_method(); + ctx = KOSSL::self()->SSL_CTX_new(meth); if (ctx == NULL) return false; - ssl = SSL_new(ctx); + ssl = KOSSL::self()->SSL_new(ctx); if (!ssl) return false; + sk = KOSSL::self()->SSL_get_ciphers(ssl); + cnt = KOSSL::self()->OPENSSL_sk_num(sk); - CipherItem *item; - for (i=0; ; i++) { + for (i = 0; i < cnt; i++) { int j, k; - SSL_CONST SSL_CIPHER *sc; - sc = (meth->get_cipher)(i); + SSL_CIPHER *sc = reinterpret_cast<SSL_CIPHER*>(KOSSL::self()->OPENSSL_sk_value(sk, i)); if (!sc) break; // Leak of sc*? - TQString scn(sc->name); + TQString scn(KOSSL::self()->SSL_CIPHER_get_name(sc)); if (scn.contains("ADH-") || scn.contains("NULL-") || scn.contains("DES-CBC3-SHA") || scn.contains("FZA-")) { continue; } - k = SSL_CIPHER_get_bits(sc, &j); + k = KOSSL::self()->SSL_CIPHER_get_bits(sc, &j); - item = new CipherItem( SSLv2Box, sc->name, k, j, this ); + item = new CipherItem( SSLv2Box, scn, k, j, this ); } - if (ctx) SSL_CTX_free(ctx); - if (ssl) SSL_free(ssl); -#else - CipherItem *item; + if (ctx) KOSSL::self()->SSL_CTX_free(ctx); + if (ssl) KOSSL::self()->SSL_free(ssl); #endif +# ifndef OPENSSL_NO_SSL3_METHOD // We repeat for SSLv3 - meth = SSLv3_client_method(); - SSLeay_add_ssl_algorithms(); - ctx = SSL_CTX_new(meth); + meth = KOSSL::self()->SSLv3_client_method(); + ctx = KOSSL::self()->SSL_CTX_new(meth); if (ctx == NULL) return false; - ssl = SSL_new(ctx); + ssl = KOSSL::self()->SSL_new(ctx); if (!ssl) return false; + sk = KOSSL::self()->SSL_get_ciphers(ssl); + cnt = KOSSL::self()->OPENSSL_sk_num(sk); - for (i=0; ; i++) { + for (i = 0; i < cnt; i++) { int j, k; - SSL_CONST SSL_CIPHER *sc; - sc = (meth->get_cipher)(i); + SSL_CIPHER *sc = reinterpret_cast<SSL_CIPHER*>(KOSSL::self()->OPENSSL_sk_value(sk, i)); if (!sc) break; // Leak of sc*? - TQString scn(sc->name); + TQString scn(KOSSL::self()->SSL_CIPHER_get_name(sc)); if (scn.contains("ADH-") || scn.contains("NULL-") || scn.contains("DES-CBC3-SHA") || scn.contains("FZA-")) { continue; } - k = SSL_CIPHER_get_bits(sc, &j); + k = KOSSL::self()->SSL_CIPHER_get_bits(sc, &j); - item = new CipherItem( SSLv3Box, sc->name, k, j, this ); + item = new CipherItem( SSLv3Box, scn, k, j, this ); } - if (ctx) SSL_CTX_free(ctx); - if (ssl) SSL_free(ssl); + if (ctx) KOSSL::self()->SSL_CTX_free(ctx); + if (ssl) KOSSL::self()->SSL_free(ssl); +#endif return true; } diff --git a/kcontrol/displayconfig/displayconfig.h b/kcontrol/displayconfig/displayconfig.h index dce061003..78b033f14 100644 --- a/kcontrol/displayconfig/displayconfig.h +++ b/kcontrol/displayconfig/displayconfig.h @@ -34,13 +34,14 @@ #include <dcopobject.h> -#include <libtderandr/libtderandr.h> #ifdef __TDE_HAVE_TDEHWLIB #include <tdehardwaredevices.h> #else #define TDEGenericDevice void #endif +#include <libtderandr/libtderandr.h> + #include "monitorworkspace.h" #include "displayconfigbase.h" diff --git a/kcontrol/displayconfig/pics/gamma1.4.png b/kcontrol/displayconfig/pics/gamma1.4.png Binary files differindex f193a4c09..510aeb282 100644 --- a/kcontrol/displayconfig/pics/gamma1.4.png +++ b/kcontrol/displayconfig/pics/gamma1.4.png diff --git a/kcontrol/displayconfig/pics/gamma1.6.png b/kcontrol/displayconfig/pics/gamma1.6.png Binary files differindex 0110dad26..fefb9ac35 100644 --- a/kcontrol/displayconfig/pics/gamma1.6.png +++ b/kcontrol/displayconfig/pics/gamma1.6.png diff --git a/kcontrol/displayconfig/pics/gamma1.8.png b/kcontrol/displayconfig/pics/gamma1.8.png Binary files differindex 71fc121aa..9195c4cbc 100644 --- a/kcontrol/displayconfig/pics/gamma1.8.png +++ b/kcontrol/displayconfig/pics/gamma1.8.png diff --git a/kcontrol/displayconfig/pics/gamma2.0.png b/kcontrol/displayconfig/pics/gamma2.0.png Binary files differindex 6a3f72a8f..7d8fa28db 100644 --- a/kcontrol/displayconfig/pics/gamma2.0.png +++ b/kcontrol/displayconfig/pics/gamma2.0.png diff --git a/kcontrol/displayconfig/pics/gamma2.2.png b/kcontrol/displayconfig/pics/gamma2.2.png Binary files differindex 573a57e70..053704d4f 100644 --- a/kcontrol/displayconfig/pics/gamma2.2.png +++ b/kcontrol/displayconfig/pics/gamma2.2.png diff --git a/kcontrol/displayconfig/pics/gamma2.4.png b/kcontrol/displayconfig/pics/gamma2.4.png Binary files differindex 88bc32395..dc1f8010a 100644 --- a/kcontrol/displayconfig/pics/gamma2.4.png +++ b/kcontrol/displayconfig/pics/gamma2.4.png diff --git a/kcontrol/energy/pics/energybig.png b/kcontrol/energy/pics/energybig.png Binary files differindex 1a79fe748..0bf01274d 100644 --- a/kcontrol/energy/pics/energybig.png +++ b/kcontrol/energy/pics/energybig.png diff --git a/kcontrol/energy/pics/lo-energy.png b/kcontrol/energy/pics/lo-energy.png Binary files differindex 9706644b1..850b4ab00 100644 --- a/kcontrol/energy/pics/lo-energy.png +++ b/kcontrol/energy/pics/lo-energy.png diff --git a/kcontrol/hwmanager/CMakeLists.txt b/kcontrol/hwmanager/CMakeLists.txt index 584eba7bc..dfe327740 100644 --- a/kcontrol/hwmanager/CMakeLists.txt +++ b/kcontrol/hwmanager/CMakeLists.txt @@ -1,6 +1,6 @@ ################################################# # -# (C) 2012 Timothy Pearson +# (C) 2012 - 2015 Timothy Pearson # kb9vqf (AT) pearsoncomputing.net # # Improvements and feedback are welcome @@ -25,6 +25,12 @@ link_directories( ##### other data ################################ install( FILES hwmanager.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) +install( FILES hwdevicetray.desktop + DESTINATION ${XDG_APPS_INSTALL_DIR} + RENAME tdehwdevicetray.desktop ) +install( FILES hwdevicetray-autostart.desktop + DESTINATION ${AUTOSTART_INSTALL_DIR} + RENAME tdehwdevicetray-autostart.desktop ) ##### kcm_iccconfig (module) #################### @@ -33,7 +39,18 @@ set_source_files_properties( hwmanager.cpp PROPERTIES COMPILE_FLAGS -DKDE_CONFDI tde_add_kpart( kcm_hwmanager AUTOMOC SOURCES - hwmanager.cpp deviceiconview.cpp devicepropsdlg.cpp devicepropsdlgbase.ui hwmanagerbase.ui hwmanager.skel + hwmanager.cpp deviceiconview.cpp devicepropsdlg.cpp devicepropsdlgbase.ui hwmanagerbase.ui + cryptpassworddlg.cpp cryptpassworddlgbase.ui hwmanager.skel LINK tdeio-shared DESTINATION ${PLUGIN_INSTALL_DIR} ) + +##### tdehwdevicetray (executable) ############## + +tde_add_executable( tdehwdevicetray AUTOMOC + SOURCES + hwdevicetray_main.cpp hwdevicetray.cpp hwdevicetray_app.cpp + hwdevicetray_configdialog.cpp + LINK tdeio-shared tdeutils-shared tdeui-shared + DESTINATION ${BIN_INSTALL_DIR} +)
\ No newline at end of file diff --git a/kcontrol/hwmanager/cryptpassworddlg.cpp b/kcontrol/hwmanager/cryptpassworddlg.cpp new file mode 100644 index 000000000..1d66d89c1 --- /dev/null +++ b/kcontrol/hwmanager/cryptpassworddlg.cpp @@ -0,0 +1,140 @@ +/* This file is part of TDE + Copyright (C) 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#include <config.h> + +#include <tqradiobutton.h> +#include <tqpushbutton.h> +#include <tqvalidator.h> +#include <tqlineedit.h> +#include <tqiconset.h> +#include <tqlabel.h> +#include <tqtabwidget.h> +#include <tqgroupbox.h> +#include <tqlayout.h> +#include <tqslider.h> +#include <tqpainter.h> +#include <tqstyle.h> +#include <tqfile.h> +#include <tqinternal_p.h> +#undef Unsorted // Required for --enable-final (tqdir.h) +#include <tqfiledialog.h> + +#include <kpassdlg.h> +#include <kbuttonbox.h> +#include <kcombobox.h> +#include <tdelocale.h> +#include <kiconloader.h> +#include <kurlrequester.h> +#include <tdeapplication.h> +#include <klineedit.h> +#include <kpushbutton.h> +#include <kstdguiitem.h> +#include <tdemessagebox.h> +#include <ksslcertificate.h> + +#include "cryptpassworddlg.h" + +CryptPasswordDialog::CryptPasswordDialog(TQWidget *parent, TQString passwordPrompt, TQString caption, bool allow_card, KSSLCertificate* card_cert, bool* use_card) + : KDialogBase(Plain, ((caption == "")?i18n("Enter Password"):caption), Ok|Cancel, Ok, parent, 0L, true, true), + m_useCard(use_card) +{ + m_base = new CryptPasswordDialogBase(plainPage()); + + TQGridLayout *mainGrid = new TQGridLayout(plainPage(), 1, 1, 0, spacingHint()); + mainGrid->setRowStretch(1, 1); + mainGrid->addWidget(m_base, 0, 0); + + m_base->passwordPrompt->setText(passwordPrompt); + m_base->passwordIcon->setPixmap(SmallIcon("password.png")); + + if (!allow_card) { + m_base->cardKeyButton->hide(); + m_base->cardKeyInfo->hide(); + } + else { + if (card_cert) { + m_base->cardKeyInfo->setText(card_cert->getSubject()); + } + } + + connect(m_base->textPasswordButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(processLockouts())); + connect(m_base->filePasswordButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(processLockouts())); + connect(m_base->cardKeyButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(processLockouts())); + connect(m_base->textPasswordEntry, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(processLockouts())); + connect(m_base->filePasswordURL, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(processLockouts())); + + m_base->textPasswordEntry->setFocus(); + + processLockouts(); +} + +CryptPasswordDialog::~CryptPasswordDialog() +{ +} + +TQByteArray CryptPasswordDialog::password() { + if (m_base->textPasswordButton->isOn() == true) { + m_password.duplicate(m_base->textPasswordEntry->password(), strlen(m_base->textPasswordEntry->password())); + if (m_useCard) *m_useCard = false; + } + else if (m_base->filePasswordButton->isOn() == true) { + m_password = TQFile(m_base->filePasswordURL->url()).readAll(); + if (m_useCard) *m_useCard = false; + } + else { + if (m_useCard) *m_useCard = true; + } + + return m_password; +} + +void CryptPasswordDialog::processLockouts() { + if (m_base->textPasswordButton->isOn() == true) { + m_base->textPasswordEntry->setEnabled(true); + m_base->filePasswordURL->setEnabled(false); + m_base->textPasswordEntry->setFocus(); + if (strlen(m_base->textPasswordEntry->password()) > 0) { + enableButtonOK(true); + } + else { + enableButtonOK(false); + } + } + else if (m_base->filePasswordButton->isOn() == true) { + m_base->textPasswordEntry->setEnabled(false); + m_base->filePasswordURL->setEnabled(true); + m_base->filePasswordURL->setFocus(); + if (TQFile(m_base->filePasswordURL->url()).exists()) { + enableButtonOK(true); + } + else { + enableButtonOK(false); + } + } + else { + m_base->textPasswordEntry->setEnabled(false); + m_base->filePasswordURL->setEnabled(false); + enableButtonOK(true); + } +} + +void CryptPasswordDialog::virtual_hook( int id, void* data ) +{ KDialogBase::virtual_hook( id, data ); } + +#include "cryptpassworddlg.moc" diff --git a/kcontrol/hwmanager/cryptpassworddlg.h b/kcontrol/hwmanager/cryptpassworddlg.h new file mode 100644 index 000000000..d595c4a73 --- /dev/null +++ b/kcontrol/hwmanager/cryptpassworddlg.h @@ -0,0 +1,64 @@ +/* This file is part of TDE + Copyright (C) 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef __cryptpassworddlg_h__ +#define __cryptpassworddlg_h__ + +#include <kdialogbase.h> + +#include "cryptpassworddlgbase.h" + +class KSSLCertificate; + +/** + * + * Dialog to enter LUKS passwords or password files + * + * @version 0.1 + * @author Timothy Pearson <kb9vqf@pearsoncomputing.net> + */ + +class TDEUI_EXPORT CryptPasswordDialog : public KDialogBase +{ + Q_OBJECT +public: + /** + * Create a dialog that allows a user to enter LUKS passwords or password files + * @param parent Parent widget + */ + CryptPasswordDialog(TQWidget *parent, TQString passwordPrompt, TQString caption=TQString::null, bool allow_card=false, KSSLCertificate* card_cert=NULL, bool* use_card=NULL); + virtual ~CryptPasswordDialog(); + + TQByteArray password(); + +protected: + virtual void virtual_hook( int id, void* data ); + +private slots: + void processLockouts(); + +private: + CryptPasswordDialogBase* m_base; + TQByteArray m_password; + bool* m_useCard; + + class CryptPasswordDialogPrivate; + CryptPasswordDialogPrivate* d; +}; + +#endif diff --git a/kcontrol/hwmanager/cryptpassworddlgbase.ui b/kcontrol/hwmanager/cryptpassworddlgbase.ui new file mode 100644 index 000000000..549a591b0 --- /dev/null +++ b/kcontrol/hwmanager/cryptpassworddlgbase.ui @@ -0,0 +1,148 @@ +<!DOCTYPE UI><UI version="3.0" stdsetdef="1"> + <class>CryptPasswordDialogBase</class> + <widget class="TQWidget"> + <property name="name"> + <cstring>CryptPasswordDialogBase</cstring> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="TQLabel" row="0" column="0" colspan="1"> + <property name="name"> + <cstring>passwordIcon</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>4</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + <widget class="TQLabel" row="0" column="1" colspan="1"> + <property name="name"> + <cstring>passwordPrompt</cstring> + </property> + <property name="text"> + <string></string> + </property> + </widget> + <widget class="TQGroupBox" row="1" column="0" colspan="2"> + <property name="name"> + <cstring>passwordProps</cstring> + </property> + <property name="title"> + <string>Password Source</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="TQButtonGroup" row="0" column="0" colspan="1"> + <property name="name"> + <cstring>enabledBox</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="frameShape"> + <enum>NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>Plain</enum> + </property> + <property name="title"> + <string></string> + </property> + <property name="exclusive"> + <bool>true</bool> + </property> + <property name="radioButtonExclusive"> + <bool>true</bool> + </property> + <property name="margin"> + <number>0</number> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <widget class="TQRadioButton" row="0" column="0" colspan="1"> + <property name="name"> + <cstring>textPasswordButton</cstring> + </property> + <property name="text"> + <string>Text:</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + <widget class="KPasswordEdit" row="0" column="1" colspan="1"> + <property name="name"> + <cstring>textPasswordEntry</cstring> + </property> + </widget> + <widget class="TQRadioButton" row="1" column="0" colspan="1"> + <property name="name"> + <cstring>filePasswordButton</cstring> + </property> + <property name="text"> + <string>File:</string> + </property> + </widget> + <widget class="KURLRequester" row="1" column="1" colspan="1"> + <property name="name"> + <cstring>filePasswordURL</cstring> + </property> + <property name="filter"> + <cstring>*</cstring> + </property> + <property name="mode"> + <number>17</number> + </property> + </widget> + <widget class="TQRadioButton" row="2" column="0" colspan="1"> + <property name="name"> + <cstring>cardKeyButton</cstring> + </property> + <property name="text"> + <string>Cryptographic Card</string> + </property> + </widget> + <widget class="TQLabel" row="2" column="1" colspan="1"> + <property name="name"> + <cstring>cardKeyInfo</cstring> + </property> + <property name="text"> + <string></string> + </property> + </widget> + </grid> + </widget> + </grid> + </widget> + </grid> + </widget> + <includes> + <include location="local" impldecl="in implementation">CryptPasswordDialogBase.ui.h</include> + </includes> + <Q_SLOTS> + <slot>enableSupport_toggled(bool)</slot> + </Q_SLOTS> + <includes> + <include location="local" impldecl="in implementation">kdialog.h</include> + </includes> + <layoutdefaults spacing="3" margin="6"/> + <layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/> +</UI> diff --git a/kcontrol/hwmanager/devicepropsdlg.cpp b/kcontrol/hwmanager/devicepropsdlg.cpp index 12de8cea9..885dc7a7a 100644 --- a/kcontrol/hwmanager/devicepropsdlg.cpp +++ b/kcontrol/hwmanager/devicepropsdlg.cpp @@ -32,13 +32,19 @@ #undef Unsorted // Required for --enable-final (tqdir.h) #include <tqfiledialog.h> +#include <kpassdlg.h> +#include <kactivelabel.h> #include <kbuttonbox.h> #include <kcombobox.h> #include <tdelocale.h> #include <tdeapplication.h> #include <klineedit.h> +#include <kpushbutton.h> #include <kstdguiitem.h> #include <tdemessagebox.h> +#include <ksslcertificate.h> + +#include "cryptpassworddlg.h" #include "devicepropsdlg.h" @@ -255,6 +261,7 @@ DevicePropertiesDialog::DevicePropertiesDialog(TDEGenericDevice* device, TQWidge // Remove all non-applicable tabs if (m_device->type() != TDEGenericDeviceType::Disk) { base->tabBarWidget->removePage(base->tabDisk); + base->tabBarWidget->removePage(base->tabDiskCrypt); } if (m_device->type() != TDEGenericDeviceType::CPU) { base->tabBarWidget->removePage(base->tabCPU); @@ -283,13 +290,29 @@ DevicePropertiesDialog::DevicePropertiesDialog(TDEGenericDevice* device, TQWidge if (m_device->type() != TDEGenericDeviceType::Event) { base->tabBarWidget->removePage(base->tabEvent); } + if (m_device->type() != TDEGenericDeviceType::CryptographicCard) { + base->tabBarWidget->removePage(base->tabCryptographicCard); + } if (m_device->type() == TDEGenericDeviceType::CPU) { connect(base->comboCPUGovernor, TQT_SIGNAL(activated(const TQString &)), this, TQT_SLOT(setCPUGovernor(const TQString &))); } if (m_device->type() == TDEGenericDeviceType::Disk) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(m_device); connect(base->buttonDiskMount, TQT_SIGNAL(clicked()), this, TQT_SLOT(mountDisk())); connect(base->buttonDiskUnmount, TQT_SIGNAL(clicked()), this, TQT_SLOT(unmountDisk())); + if (sdevice->isDiskOfType(TDEDiskDeviceType::LUKS)) { + connect(base->cryptLUKSAddKey, TQT_SIGNAL(clicked()), this, TQT_SLOT(cryptLUKSAddKey())); + connect(base->cryptLUKSDelKey, TQT_SIGNAL(clicked()), this, TQT_SLOT(cryptLUKSDelKey())); + connect(base->cryptLUKSKeySlotList, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(processLockouts())); + base->cryptLUKSKeySlotList->setAllColumnsShowFocus(true); + base->cryptLUKSKeySlotList->setFullWidth(true); + cryptLUKSPopulateList(); + processLockouts(); + } + else { + base->tabBarWidget->removePage(base->tabDiskCrypt); + } } if ((m_device->type() == TDEGenericDeviceType::OtherSensor) || (m_device->type() == TDEGenericDeviceType::ThermalSensor)) { @@ -340,17 +363,21 @@ TQString assembleSwitchList(TDESwitchType::TDESwitchType switches) { return (TDEEventDevice::friendlySwitchList(switches).join("<br>")); } +static TQString formatDisplayString(TQString input) { + return TQStyleSheet::escape(input); +} + void DevicePropertiesDialog::populateDeviceInformation() { if (m_device) { base->labelDeviceType->setText(m_device->friendlyDeviceType()); base->iconDeviceType->setPixmap(m_device->icon(TDEIcon::SizeSmall)); - base->labelDeviceName->setText(m_device->friendlyName()); - base->labelDeviceNode->setText((m_device->deviceNode().isNull())?i18n("<none>"):m_device->deviceNode()); - base->labelSystemPath->setText(m_device->systemPath()); - base->labelSubsytemType->setText(m_device->subsystem()); - base->labelDeviceDriver->setText((m_device->deviceDriver().isNull())?i18n("<none>"):m_device->deviceDriver()); - base->labelDeviceClass->setText((m_device->PCIClass().isNull())?i18n("<n/a>"):m_device->PCIClass()); - base->labelModalias->setText((m_device->moduleAlias().isNull())?i18n("<none>"):m_device->moduleAlias()); + base->labelDeviceName->setText(formatDisplayString(m_device->friendlyName())); + base->labelDeviceNode->setText(formatDisplayString((m_device->deviceNode().isNull())?i18n("<none>"):m_device->deviceNode())); + base->labelSystemPath->setText(formatDisplayString(m_device->systemPath())); + base->labelSubsytemType->setText(formatDisplayString(m_device->subsystem())); + base->labelDeviceDriver->setText(formatDisplayString((m_device->deviceDriver().isNull())?i18n("<none>"):m_device->deviceDriver())); + base->labelDeviceClass->setText(formatDisplayString((m_device->PCIClass().isNull())?i18n("<n/a>"):m_device->PCIClass())); + base->labelModalias->setText(formatDisplayString((m_device->moduleAlias().isNull())?i18n("<none>"):m_device->moduleAlias())); // These might be redundant #if 0 @@ -362,10 +389,10 @@ void DevicePropertiesDialog::populateDeviceInformation() { base->labelVendorModel->hide(); base->stocklabelVendorModel->hide(); #endif - base->labelSerialNumber->setText((m_device->serialNumber().isNull())?i18n("<unknown>"):m_device->serialNumber()); + base->labelSerialNumber->setText(formatDisplayString((m_device->serialNumber().isNull())?i18n("<unknown>"):m_device->serialNumber())); if (m_device->subsystem() == "pci") { - base->labelBusID->setText(m_device->busID()); + base->labelBusID->setText(formatDisplayString(m_device->busID())); base->labelBusID->show(); base->stocklabelBusID->show(); } @@ -379,15 +406,15 @@ void DevicePropertiesDialog::populateDeviceInformation() { TQString mountPoint = sdevice->mountPath(); if (mountPoint == "") mountPoint = i18n("<none>"); - base->labelDiskMountpoint->setText(mountPoint); + base->labelDiskMountpoint->setText(formatDisplayString(mountPoint)); TQString fsName = sdevice->fileSystemName(); if (fsName == "") fsName = i18n("<unknown>"); - base->labelDiskFileSystemType->setText(fsName); + base->labelDiskFileSystemType->setText(formatDisplayString(fsName)); TQString volUUID = sdevice->diskUUID(); if (volUUID == "") volUUID = i18n("<none>"); - base->labelDiskUUID->setText(volUUID); + base->labelDiskUUID->setText(formatDisplayString(volUUID)); // Show status TQString status_text = "<qt>"; @@ -663,19 +690,22 @@ void DevicePropertiesDialog::populateDeviceInformation() { if ((*it) == TDESystemPowerState::Active) { powerStatesString += i18n("Active<br>"); } - if ((*it) == TDESystemPowerState::Standby) { + else if ((*it) == TDESystemPowerState::Standby) { powerStatesString += i18n("Standby<br>"); } - if ((*it) == TDESystemPowerState::Freeze) { + else if ((*it) == TDESystemPowerState::Freeze) { powerStatesString += i18n("Freeze<br>"); } - if ((*it) == TDESystemPowerState::Suspend) { + else if ((*it) == TDESystemPowerState::Suspend) { powerStatesString += i18n("Suspend<br>"); } - if ((*it) == TDESystemPowerState::Hibernate) { + else if ((*it) == TDESystemPowerState::Hibernate) { powerStatesString += i18n("Hibernate<br>"); } - if ((*it) == TDESystemPowerState::PowerOff) { + else if ((*it) == TDESystemPowerState::HybridSuspend) { + powerStatesString += i18n("Hybrid Suspend<br>"); + } + else if ((*it) == TDESystemPowerState::PowerOff) { powerStatesString += i18n("Power Off<br>"); } } @@ -697,19 +727,22 @@ void DevicePropertiesDialog::populateDeviceInformation() { if ((*it) == TDESystemHibernationMethod::Unsupported) { label = i18n("<none>"); } - if ((*it) == TDESystemHibernationMethod::Platform) { + else if ((*it) == TDESystemHibernationMethod::Platform) { label = i18n("Platform"); } - if ((*it) == TDESystemHibernationMethod::Shutdown) { + else if ((*it) == TDESystemHibernationMethod::Suspend) { + label = i18n("Suspend"); + } + else if ((*it) == TDESystemHibernationMethod::Shutdown) { label = i18n("Shutdown"); } - if ((*it) == TDESystemHibernationMethod::Reboot) { + else if ((*it) == TDESystemHibernationMethod::Reboot) { label = i18n("Reboot"); } - if ((*it) == TDESystemHibernationMethod::TestProc) { + else if ((*it) == TDESystemHibernationMethod::TestProc) { label = i18n("Test Procedure"); } - if ((*it) == TDESystemHibernationMethod::Test) { + else if ((*it) == TDESystemHibernationMethod::Test) { label = i18n("Test"); } base->comboSystemHibernationMethod->insertItem(label, i); @@ -723,6 +756,7 @@ void DevicePropertiesDialog::populateDeviceInformation() { base->labelSystemUserCanFreeze->setText((rdevice->canFreeze())?i18n("Yes"):i18n("No")); base->labelSystemUserCanSuspend->setText((rdevice->canSuspend())?i18n("Yes"):i18n("No")); base->labelSystemUserCanHibernate->setText((rdevice->canHibernate())?i18n("Yes"):i18n("No")); + base->labelSystemUserCanHybridSuspend->setText((rdevice->canHybridSuspend())?i18n("Yes"):i18n("No")); base->labelSystemUserCanPowerOff->setText((rdevice->canPowerOff())?i18n("Yes"):i18n("No")); base->labelSystemHibernationSpace->setText((rdevice->diskSpaceNeededForHibernation()<0)?i18n("<unknown>"):TDEHardwareDevices::bytesToFriendlySizeString(rdevice->diskSpaceNeededForHibernation())); @@ -753,6 +787,73 @@ void DevicePropertiesDialog::populateDeviceInformation() { } base->labelEventSwitchActive->setText(activeSwitches); } + + if (m_device->type() == TDEGenericDeviceType::CryptographicCard) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(m_device); + + connect(cdevice, TQT_SIGNAL(cardInserted(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardInserted())); + connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardRemoved())); + + updateCryptographicCardStatusDisplay(); + } + } +} + +void DevicePropertiesDialog::cryptographicCardInserted() { + updateCryptographicCardStatusDisplay(); +} + +void DevicePropertiesDialog::cryptographicCardRemoved() { + updateCryptographicCardStatusDisplay(); +} + +void DevicePropertiesDialog::updateCryptographicCardStatusDisplay() { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(m_device); + + int status = cdevice->cardPresent(); + if ((status < 0) ||(status > 1)) { + base->labelCardStatus->setText(i18n("Unknown")); + base->labelCardCertificates->setText(""); + base->groupCardCerts->hide(); + } + else if (status == 0) { + base->labelCardStatus->setText(i18n("Empty")); + base->labelCardCertificates->setText(""); + base->groupCardCerts->hide(); + } + else if (status == 1) { + base->labelCardStatus->setText(i18n("Inserted") + TQString("<br>") + i18n("ATR: %1").arg(cdevice->cardATR())); + + X509CertificatePtrList certList = cdevice->cardX509Certificates(); + + if (certList.count() > 0) { + // Assemble list of certificates on card + unsigned int certificate_number = 1; + TQString certInfo = "<qt>"; + X509CertificatePtrList::iterator it; + for (it = certList.begin(); it != certList.end(); ++it) { + KSSLCertificate* tdeCert = KSSLCertificate::fromX509(*it); + KSSLCertificate::KSSLValidation validationStatus = tdeCert->validate(); + certInfo += i18n("Certificate #%1").arg(certificate_number) + ":<br>"; + certInfo += i18n("Subject") + ": " + tdeCert->getSubject() + "<br>"; + certInfo += i18n("Issuer") + ": " + tdeCert->getIssuer() + "<br>"; + certInfo += i18n("Status") + ": " + KSSLCertificate::verifyText(validationStatus) + "<br>"; + certInfo += i18n("Valid From") + ": " + tdeCert->getNotBefore() + "<br>"; + certInfo += i18n("Valid Until") + ": " + tdeCert->getNotAfter() + "<br>"; + certInfo += i18n("Serial Number") + ": " + tdeCert->getSerialNumber() + "<br>"; + certInfo += i18n("MD5 Digest") + ": " + tdeCert->getMD5DigestText() + "<br>"; + certInfo += "<p>"; + delete tdeCert; + certificate_number++; + } + certInfo += "</qt>"; + base->labelCardCertificates->setText(certInfo); + base->groupCardCerts->show(); + } + else { + base->labelCardCertificates->setText(""); + base->groupCardCerts->hide(); + } } } @@ -825,6 +926,293 @@ void DevicePropertiesDialog::unmountDisk() { populateDeviceInformation(); } +void DevicePropertiesDialog::cryptLUKSAddKey() { + int retcode; + + if (m_device->type() == TDEGenericDeviceType::Disk) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(m_device); + + TQListViewItem* lvi = base->cryptLUKSKeySlotList->selectedItem(); + if (lvi) { + TDECryptographicCardDevice* cdevice = NULL; + unsigned int key_slot = lvi->text(0).toUInt(); + bool allow_card = false; + bool use_card = false; + bool luks_card_key_modified = false; + KSSLCertificate* card_cert = NULL; + X509* card_cert_x509; + TQString disk_uuid = sdevice->diskUUID(); + TDEGenericDevice *hwdevice; + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard); + for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) { + cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + X509CertificatePtrList certList = cdevice->cardX509Certificates(); + if (certList.count() > 0) { + allow_card = true; + card_cert_x509 = certList[0]; + card_cert = KSSLCertificate::fromX509(certList[0]); + } + } + TQByteArray new_password; + CryptPasswordDialog* passDlg = new CryptPasswordDialog(this, i18n("Enter the new LUKS password for key slot %1").arg(key_slot), TQString::null, allow_card, card_cert, &use_card); + if (passDlg->exec() == TQDialog::Accepted) { + new_password = passDlg->password(); + if (allow_card && use_card) { + // Create new private key for disk device + if (!TQDir("/etc/trinity/luks").exists()) { + TQDir directory; + if (!directory.mkdir("/etc/trinity/luks", true)) { + KMessageBox::error(this, i18n("<qt><b>Key creation failed</b><br>Please check that you have write access to /etc/trinity and try again</qt>"), i18n("Key creation failure")); + delete card_cert; + return; + } + } + if (!TQDir("/etc/trinity/luks/card").exists()) { + TQDir directory; + if (!directory.mkdir("/etc/trinity/luks/card", true)) { + KMessageBox::error(this, i18n("<qt><b>Key creation failed</b><br>Please check that you have write access to /etc/trinity/luks and try again</qt>"), i18n("Key creation failure")); + delete card_cert; + return; + } + } + TQString cryptoFileName = TQString("/etc/trinity/luks/card/%1_slot%2").arg(disk_uuid).arg(key_slot); + TQFile file(cryptoFileName); + if (file.exists()) { + if (KMessageBox::warningYesNo(this, i18n("<qt><b>You are about to overwrite an existing card key for LUKS key slot %1</b><br>This action cannot be undone<p>Are you sure you want to proceed?</qt>").arg(key_slot), i18n("Confirmation Required")) != KMessageBox::Yes) { + delete card_cert; + return; + } + } + if (file.open(IO_WriteOnly)) { + TQByteArray randomKey; + TQByteArray encryptedRandomKey; + + // Create a new secret key using the public key from the card certificate + if (TDECryptographicCardDevice::createNewSecretRSAKeyFromCertificate(randomKey, encryptedRandomKey, card_cert_x509) < 0) { + KMessageBox::error(this, i18n("<qt><b>Key creation failed</b><br>Unable to create new secret key using the provided X509 certificate</qt>"), i18n("Key creation failure")); + delete card_cert; + return; + } + + // Write the encrypted key file to disk + file.writeBlock(encryptedRandomKey, encryptedRandomKey.size()); + file.close(); + + // Use the secret key as the LUKS passcode + new_password = randomKey; + luks_card_key_modified = true; + } + else { + KMessageBox::error(this, i18n("<qt><b>Key creation failed</b><br>Please check that you have write access to /etc/trinity/luks/card and try again</qt>"), i18n("Key creation failure")); + delete card_cert; + return; + } + } + delete passDlg; + if (!sdevice->cryptOperationsUnlockPasswordSet()) { + TQCString password; + passDlg = new CryptPasswordDialog(this, i18n("Enter the LUKS device unlock password"), TQString::null, allow_card, card_cert, &use_card); + if (passDlg->exec() == TQDialog::Accepted) { + TQByteArray unlockPassword = passDlg->password(); + if (use_card) { + // List all matching keys in directory and try each in turn... + TQDir luksKeyDir("/etc/trinity/luks/card/"); + luksKeyDir.setFilter(TQDir::Files); + luksKeyDir.setSorting(TQDir::Unsorted); + + TQValueList<TQByteArray> luksCryptedList; + TQValueList<TQByteArray> luksDecryptedList; + TQValueList<int> luksSlotNumberList; + + const TQFileInfoList *luksKeyDirList = luksKeyDir.entryInfoList(); + TQFileInfoListIterator it(*luksKeyDirList); + TQFileInfo *luksKeyFileInfo; + TQString errstr; + while ((luksKeyFileInfo = it.current()) != 0) { + if (luksKeyFileInfo->fileName().startsWith(disk_uuid) && luksKeyFileInfo->fileName().contains("_slot")) { + // Found candidate, try decryption + TQFile luksKeyFile(luksKeyFileInfo->absFilePath()); + if (luksKeyFile.open(IO_ReadOnly)) { + TQByteArray keycrypted = luksKeyFile.readAll(); + luksCryptedList.append(keycrypted); + + // Parse the file name and find the matching key slot + int current_card_keyslot = -1; + TQString fileName = luksKeyFile.name(); + int pos = fileName.find("_slot"); + if (pos >= 0) { + fileName.remove(0, pos + strlen("_slot")); + current_card_keyslot = fileName.toInt(); + luksSlotNumberList.append(current_card_keyslot); + } + } + } + ++it; + } + + // Decrypt LUKS keys + TQValueList<int> retCodeList; + retcode = cdevice->decryptDataEncryptedWithCertPublicKey(luksCryptedList, luksDecryptedList, retCodeList, &errstr); + TQValueList<TQByteArray>::iterator it2; + TQValueList<int>::iterator it3; + TQValueList<int>::iterator it4; + for (it2 = luksDecryptedList.begin(), it3 = retCodeList.begin(), it4 = luksSlotNumberList.begin(); it2 != luksDecryptedList.end(); ++it2, ++it3, ++it4) { + TQByteArray luksKeyData = *it2; + retcode = *it3; + int current_card_keyslot = *it4; + if (retcode == -3) { + // User cancelled + break; + } + if (retcode < 0) { + // ERROR + } + else { + // Key decryption successful, try to open LUKS device... + sdevice->cryptSetOperationsUnlockPassword(luksKeyData); + if (sdevice->cryptCheckKey(current_card_keyslot) == TDELUKSResult::Success) { + break; + } + else { + sdevice->cryptClearOperationsUnlockPassword(); + } + } + } + if (!sdevice->cryptOperationsUnlockPasswordSet()) { + KMessageBox::error(this, i18n("<qt><b>Key write failed</b><br>Please check the LUKS password and try again</qt>"), i18n("Key write failure")); + } + } + else { + sdevice->cryptSetOperationsUnlockPassword(unlockPassword); + } + } + delete passDlg; + } + if (sdevice->cryptOperationsUnlockPasswordSet()) { + if ((lvi->text(1) == sdevice->cryptKeySlotFriendlyName(TDELUKSKeySlotStatus::Inactive)) || (KMessageBox::warningYesNo(this, i18n("<qt><b>You are about to overwrite the key in key slot %1</b><br>This action cannot be undone<p>Are you sure you want to proceed?</qt>").arg(key_slot), i18n("Confirmation Required")) == KMessageBox::Yes)) { + if (sdevice->cryptAddKey(key_slot, new_password) != TDELUKSResult::Success) { + sdevice->cryptClearOperationsUnlockPassword(); + KMessageBox::error(this, i18n("<qt><b>Key write failed</b><br>Please check the LUKS password and try again</qt>"), i18n("Key write failure")); + } + else { + if (luks_card_key_modified) { + if (KMessageBox::warningYesNo(this, i18n("<qt><b>You have created a new card-dependent key</b><br>Card-dependent keys work in conjunction with an encrypted key file stored on the host system.<br>When a card is used to boot, card-dependent keys must be updated in the initramfs image to become usable.<p>Would you like to update the initramfs image now?</qt>"), i18n("Update Required")) == KMessageBox::Yes) { + // Update the initramfs + if (system("update-initramfs -u -k all") != 0) { + KMessageBox::error(this, i18n("<qt><b>Initramfs update failed</b><br>Card-dependent keys may not be available for use until the root storage device is available / unlocked</qt>"), i18n("Initramfs update failure")); + } + } + } + } + } + } + } + else { + delete passDlg; + } + delete card_cert; + } + } + + cryptLUKSPopulateList(); +} + +void DevicePropertiesDialog::cryptLUKSDelKey() { + if (m_device->type() == TDEGenericDeviceType::Disk) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(m_device); + + TQListViewItem* lvi = base->cryptLUKSKeySlotList->selectedItem(); + if (lvi) { + unsigned int key_slot = lvi->text(0).toUInt(); + if (KMessageBox::warningYesNo(this, i18n("<qt><b>You are about to purge the key in key slot %1</b><br>This action cannot be undone<p>Are you sure you want to proceed?</qt>").arg(lvi->text(0)), i18n("Confirmation Required")) == KMessageBox::Yes) { + if (sdevice->cryptKeySlotStatus()[key_slot] & TDELUKSKeySlotStatus::Last) { + if (KMessageBox::warningYesNo(this, i18n("<qt><b>You are about to purge the last active key from the device!</b><p>This action will render the contents of the encrypted device permanently inaccessable and cannot be undone<p>Are you sure you want to proceed?</qt>"), i18n("Confirmation Required")) != KMessageBox::Yes) { + cryptLUKSPopulateList(); + return; + } + } + if (sdevice->cryptDelKey(key_slot) != TDELUKSResult::Success) { + sdevice->cryptClearOperationsUnlockPassword(); + KMessageBox::error(this, i18n("<qt><b>Key purge failed</b><br>The key in key slot %1 is still active</qt>").arg(lvi->text(0)), i18n("Key purge failure")); + } + else { + // See if there was a cryptographic card key associated with this device and slot + TQString disk_uuid = sdevice->diskUUID(); + TQDir luksKeyDir("/etc/trinity/luks/card/"); + luksKeyDir.setFilter(TQDir::Files); + luksKeyDir.setSorting(TQDir::Unsorted); + + const TQFileInfoList *luksKeyDirList = luksKeyDir.entryInfoList(); + TQFileInfoListIterator it(*luksKeyDirList); + TQFileInfo *luksKeyFileInfo; + TQString errstr; + while ((luksKeyFileInfo = it.current()) != 0) { + if (luksKeyFileInfo->fileName().startsWith(disk_uuid) && luksKeyFileInfo->fileName().contains("_slot")) { + // Parse the file name and find the matching key slot + int current_card_keyslot = -1; + TQString fileName = luksKeyFileInfo->absFilePath(); + TQString fileNameSlot = fileName; + int pos = fileNameSlot.find("_slot"); + if (pos >= 0) { + fileNameSlot.remove(0, pos + strlen("_slot")); + current_card_keyslot = fileNameSlot.toInt(); + if (current_card_keyslot >= 0) { + if ((unsigned int)current_card_keyslot == key_slot) { + if (!TQFile(fileName).remove()) { + KMessageBox::error(this, i18n("<qt><b>Card key purge failed</b><br>The card key for slot %1 has been fully deactivated but is still present on your system<br>This does not present a significant security risk</qt>").arg(lvi->text(0)), i18n("Key purge failure")); + } + break; + } + } + } + } + ++it; + } + } + } + } + } + + cryptLUKSPopulateList(); +} + +void DevicePropertiesDialog::cryptLUKSPopulateList() { + unsigned int i; + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(m_device); + + base->cryptLUKSKeySlotList->clear(); + unsigned int count = sdevice->cryptKeySlotCount(); + TDELUKSKeySlotStatusList status = sdevice->cryptKeySlotStatus(); + for (i = 0; i < count; i++) { + new TQListViewItem(base->cryptLUKSKeySlotList, TQString("%1").arg(i), sdevice->cryptKeySlotFriendlyName(status[i])); + } + + processLockouts(); +} + +void DevicePropertiesDialog::processLockouts() { + if (m_device->type() == TDEGenericDeviceType::Disk) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(m_device); + + TQListViewItem* lvi = base->cryptLUKSKeySlotList->selectedItem(); + if (lvi) { + if (lvi->text(1) == sdevice->cryptKeySlotFriendlyName(TDELUKSKeySlotStatus::Active)) { + base->cryptLUKSAddKey->setEnabled(true); + base->cryptLUKSDelKey->setEnabled(true); + } + else { + base->cryptLUKSAddKey->setEnabled(true); + base->cryptLUKSDelKey->setEnabled(false); + } + } + else { + base->cryptLUKSAddKey->setEnabled(false); + base->cryptLUKSDelKey->setEnabled(false); + } + } +} + void DevicePropertiesDialog::virtual_hook( int id, void* data ) { KDialogBase::virtual_hook( id, data ); } diff --git a/kcontrol/hwmanager/devicepropsdlg.h b/kcontrol/hwmanager/devicepropsdlg.h index bbff43977..e958d39ba 100644 --- a/kcontrol/hwmanager/devicepropsdlg.h +++ b/kcontrol/hwmanager/devicepropsdlg.h @@ -191,6 +191,16 @@ private slots: void mountDisk(); void unmountDisk(); + void cryptLUKSAddKey(); + void cryptLUKSDelKey(); + void cryptLUKSPopulateList(); + + void cryptographicCardInserted(); + void cryptographicCardRemoved(); + void updateCryptographicCardStatusDisplay(); + + void processLockouts(); + private: TDEGenericDevice* m_device; DevicePropertiesDialogBase* base; diff --git a/kcontrol/hwmanager/devicepropsdlgbase.ui b/kcontrol/hwmanager/devicepropsdlgbase.ui index 74afdf5f3..0ea911c71 100644 --- a/kcontrol/hwmanager/devicepropsdlgbase.ui +++ b/kcontrol/hwmanager/devicepropsdlgbase.ui @@ -80,7 +80,7 @@ <string>Device Name:</string> </property> </widget> - <widget class="TQLabel" row="1" column="1" colspan="3"> + <widget class="KActiveLabel" row="1" column="1" colspan="3"> <property name="name"> <cstring>labelDeviceName</cstring> </property> @@ -93,7 +93,7 @@ <string>Device Node:</string> </property> </widget> - <widget class="TQLabel" row="2" column="1" colspan="3"> + <widget class="KActiveLabel" row="2" column="1" colspan="3"> <property name="name"> <cstring>labelDeviceNode</cstring> </property> @@ -106,7 +106,7 @@ <string>System Path:</string> </property> </widget> - <widget class="TQLabel" row="3" column="1" colspan="3"> + <widget class="KActiveLabel" row="3" column="1" colspan="3"> <property name="name"> <cstring>labelSystemPath</cstring> </property> @@ -119,7 +119,7 @@ <string>Subsystem Type:</string> </property> </widget> - <widget class="TQLabel" row="4" column="1" colspan="3"> + <widget class="KActiveLabel" row="4" column="1" colspan="3"> <property name="name"> <cstring>labelSubsytemType</cstring> </property> @@ -132,7 +132,7 @@ <string>Device Driver:</string> </property> </widget> - <widget class="TQLabel" row="5" column="1" colspan="3"> + <widget class="KActiveLabel" row="5" column="1" colspan="3"> <property name="name"> <cstring>labelDeviceDriver</cstring> </property> @@ -145,7 +145,7 @@ <string>Device Class:</string> </property> </widget> - <widget class="TQLabel" row="6" column="1" colspan="3"> + <widget class="KActiveLabel" row="6" column="1" colspan="3"> <property name="name"> <cstring>labelDeviceClass</cstring> </property> @@ -158,7 +158,7 @@ <string>Manufacturer:</string> </property> </widget> - <widget class="TQLabel" row="7" column="1" colspan="3"> + <widget class="KActiveLabel" row="7" column="1" colspan="3"> <property name="name"> <cstring>labelVendorName</cstring> </property> @@ -171,7 +171,7 @@ <string>Model:</string> </property> </widget> - <widget class="TQLabel" row="8" column="1" colspan="3"> + <widget class="KActiveLabel" row="8" column="1" colspan="3"> <property name="name"> <cstring>labelVendorModel</cstring> </property> @@ -184,7 +184,7 @@ <string>Serial Number:</string> </property> </widget> - <widget class="TQLabel" row="9" column="1" colspan="3"> + <widget class="KActiveLabel" row="9" column="1" colspan="3"> <property name="name"> <cstring>labelSerialNumber</cstring> </property> @@ -197,7 +197,7 @@ <string>Bus ID:</string> </property> </widget> - <widget class="TQLabel" row="10" column="1" colspan="3"> + <widget class="KActiveLabel" row="10" column="1" colspan="3"> <property name="name"> <cstring>labelBusID</cstring> </property> @@ -210,7 +210,7 @@ <string>Technical Details:</string> </property> </widget> - <widget class="TQLabel" row="11" column="1" colspan="3"> + <widget class="KActiveLabel" row="11" column="1" colspan="3"> <property name="name"> <cstring>labelModalias</cstring> </property> @@ -266,7 +266,7 @@ <string>Mountpoint:</string> </property> </widget> - <widget class="TQLabel" row="0" column="1" colspan="1"> + <widget class="KActiveLabel" row="0" column="1" colspan="1"> <property name="name"> <cstring>labelDiskMountpoint</cstring> </property> @@ -279,7 +279,7 @@ <string>Filesystem Type:</string> </property> </widget> - <widget class="TQLabel" row="1" column="1" colspan="1"> + <widget class="KActiveLabel" row="1" column="1" colspan="1"> <property name="name"> <cstring>labelDiskFileSystemType</cstring> </property> @@ -292,7 +292,7 @@ <string>Volume UUID:</string> </property> </widget> - <widget class="TQLabel" row="2" column="1" colspan="1"> + <widget class="KActiveLabel" row="2" column="1" colspan="1"> <property name="name"> <cstring>labelDiskUUID</cstring> </property> @@ -308,7 +308,7 @@ <set>AlignTop|AlignLeft</set> </property> </widget> - <widget class="TQLabel" row="3" column="1" colspan="1"> + <widget class="KActiveLabel" row="3" column="1" colspan="1"> <property name="name"> <cstring>labelDiskStatus</cstring> </property> @@ -326,7 +326,7 @@ <property name="name"> <cstring>unnamed</cstring> </property> - <widget class="TQPushButton" row="0" column="0" colspan="1"> + <widget class="KPushButton" row="0" column="0" colspan="1"> <property name="name"> <cstring>buttonDiskMount</cstring> </property> @@ -334,7 +334,7 @@ <string>Mount</string> </property> </widget> - <widget class="TQPushButton" row="0" column="1" colspan="1"> + <widget class="KPushButton" row="0" column="1" colspan="1"> <property name="name"> <cstring>buttonDiskUnmount</cstring> </property> @@ -365,6 +365,95 @@ </widget> <widget class="TQWidget"> <property name="name"> + <cstring>tabDiskCrypt</cstring> + </property> + <attribute name="title"> + <string>LUKS</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="TQGroupBox" row="0" column="0"> + <property name="name"> + <cstring>groupLUKSProps</cstring> + </property> + <property name="title"> + <string>LUKS Information</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="TDEListView" row="0" column="0" colspan="2"> + <column> + <property name="text"> + <string>Slot Number</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizeable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Status</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizeable"> + <bool>true</bool> + </property> + </column> + <property name="name"> + <cstring>cryptLUKSKeySlotList</cstring> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + </widget> + <widget class="KPushButton" row="1" column="0" colspan="1"> + <property name="name"> + <cstring>cryptLUKSAddKey</cstring> + </property> + <property name="text"> + <string>Install new password into keyslot</string> + </property> + </widget> + <widget class="KPushButton" row="1" column="1" colspan="1"> + <property name="name"> + <cstring>cryptLUKSDelKey</cstring> + </property> + <property name="text"> + <string>Delete existing password from keyslot</string> + </property> + </widget> + </grid> + </widget> + <spacer row="8" column="0"> + <property name="name" stdset="0"> + <cstring>Spacer4</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </grid> + </widget> + <widget class="TQWidget"> + <property name="name"> <cstring>tabCPU</cstring> </property> <attribute name="title"> @@ -1419,7 +1508,20 @@ <cstring>labelSystemUserCanHibernate</cstring> </property> </widget> - <widget class="TQLabel" row="7" column="0" colspan="1"> + <widget class="TQLabel" row="7" column="0" colspan="1"> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="text"> + <string>User Can Request Hybrid Suspend</string> + </property> + </widget> + <widget class="TQLabel" row="7" column="1" colspan="1"> + <property name="name"> + <cstring>labelSystemUserCanHybridSuspend</cstring> + </property> + </widget> + <widget class="TQLabel" row="8" column="0" colspan="1"> <property name="name"> <cstring>unnamed</cstring> </property> @@ -1427,7 +1529,7 @@ <string>User Can Request Shutdown</string> </property> </widget> - <widget class="TQLabel" row="7" column="1" colspan="1"> + <widget class="TQLabel" row="8" column="1" colspan="1"> <property name="name"> <cstring>labelSystemUserCanPowerOff</cstring> </property> @@ -1528,6 +1630,84 @@ </spacer> </grid> </widget> + <widget class="TQWidget"> + <property name="name"> + <cstring>tabCryptographicCard</cstring> + </property> + <attribute name="title"> + <string>Cryptographic Card</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="TQGroupBox" row="0" column="0"> + <property name="name"> + <cstring>groupInput</cstring> + </property> + <property name="title"> + <string>Card Status</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="TQLabel" row="0" column="0" colspan="1"> + <property name="name"> + <cstring>labelCardStatus</cstring> + </property> + <property name="text"> + <string></string> + </property> + <property name="alignment"> + <set>AlignTop|AlignLeft</set> + </property> + </widget> + </grid> + </widget> + <widget class="TQGroupBox" row="1" column="0"> + <property name="name"> + <cstring>groupCardCerts</cstring> + </property> + <property name="title"> + <string>Card Certificates</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="TQLabel" row="0" column="0" colspan="1"> + <property name="name"> + <cstring>labelCardCertificates</cstring> + </property> + <property name="text"> + <string></string> + </property> + <property name="alignment"> + <set>AlignTop|AlignLeft</set> + </property> + </widget> + </grid> + </widget> + <spacer row="8" column="0"> + <property name="name" stdset="0"> + <cstring>Spacer4</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </grid> + </widget> </widget> </grid> </widget> diff --git a/kcontrol/hwmanager/hwdevicetray-autostart.desktop b/kcontrol/hwmanager/hwdevicetray-autostart.desktop new file mode 100644 index 000000000..57bd9b893 --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray-autostart.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=tdehwdevicetray +GenericName=Hardware Device Monitor +Comment=Monitor hardware devices from the system tray +Exec=tdehwdevicetray +Icon=kcmdevices +X-TDE-autostart-after=panel +X-TDE-StartupNotify=false +X-TDE-UniqueApplet=true +X-TDE-autostart-condition=tdehwdevicetrayrc:General:Autostart:true +Categories=System;Applet; diff --git a/kcontrol/hwmanager/hwdevicetray.cpp b/kcontrol/hwmanager/hwdevicetray.cpp new file mode 100644 index 000000000..b6ef8a6ad --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray.cpp @@ -0,0 +1,431 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of hwdevicetray, the TDE Hardware Device Monitor System Tray Application + * + * hwdevicetray 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. + * + * hwdevicetray 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#include <tqtimer.h> +#include <tqimage.h> +#include <tqtooltip.h> +#include <tqfileinfo.h> + +#include <krun.h> +#include <tdeaction.h> +#include <tdeapplication.h> +#include <kcmultidialog.h> +#include <kdebug.h> +#include <khelpmenu.h> +#include <kiconloader.h> +#include <tdelocale.h> +#include <tdepopupmenu.h> +#include <kstdaction.h> +#include <kstdguiitem.h> +#include <tdeglobal.h> +#include <tdemessagebox.h> +#include <kpassivepopup.h> +#include <kstandarddirs.h> + +#include <dcopclient.h> + +#include <cstdlib> +#include <unistd.h> + +#include "hwdevicetray_configdialog.h" + +#include "hwdevicetray.h" + +HwDeviceSystemTray::HwDeviceSystemTray(TQWidget* parent, const char *name) + : KSystemTray(parent, name) { + + // Create notifier + m_hardwareNotifierContainer = new TDEPassivePopupStackContainer(); + connect(m_hardwareNotifierContainer, TQT_SIGNAL(popupClicked(KPassivePopup*, TQPoint, TQString)), this, TQT_SLOT(devicePopupClicked(KPassivePopup*, TQPoint, TQString))); + + // Create help submenu + m_help = new KHelpMenu(this, TDEGlobal::instance()->aboutData(), false, actionCollection()); + TDEPopupMenu *help = m_help->menu(); + help->connectItem(KHelpMenu::menuHelpContents, this, TQT_SLOT(slotHelpContents())); + + setPixmap(KSystemTray::loadIcon("kcmdevices")); + setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + connect(this, TQT_SIGNAL(quitSelected()), this, TQT_SLOT(_quit())); + TQToolTip::add(this, i18n("Hardware device monitor")); + m_parent = parent; + + globalKeys = new TDEGlobalAccel(TQT_TQOBJECT(this)); + TDEGlobalAccel* keys = globalKeys; + #include "hwdevicetray_bindings.cpp" + // the keys need to be read from tdeglobals, not kickerrc + globalKeys->readSettings(); + globalKeys->setEnabled(true); + globalKeys->updateConnections(); + + connect(kapp, TQT_SIGNAL(settingsChanged(int)), TQT_SLOT(slotSettingsChanged(int))); + + new TDEActionMenu(i18n("Open Device"), SmallIcon("connect_creating", TQIconSet::Automatic), actionCollection(), "mount_menu"); + new TDEActionMenu(i18n("Eject Device"), SmallIcon("connect_no", TQIconSet::Automatic), actionCollection(), "unmount_menu"); + +#ifdef __TDE_HAVE_TDEHWLIB + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + connect(hwdevices, TQT_SIGNAL(hardwareAdded(TDEGenericDevice*)), this, TQT_SLOT(deviceAdded(TDEGenericDevice*))); + connect(hwdevices, TQT_SIGNAL(hardwareRemoved(TDEGenericDevice*)), this, TQT_SLOT(deviceRemoved(TDEGenericDevice*))); + connect(hwdevices, TQT_SIGNAL(hardwareUpdated(TDEGenericDevice*)), this, TQT_SLOT(deviceChanged(TDEGenericDevice*))); +#endif +} + +HwDeviceSystemTray::~HwDeviceSystemTray() { + delete m_hardwareNotifierContainer; +} + +/*! + * \b TQT_SLOT which called if hwdevicetray is exited by the user. In this case the user + * is asked through a yes/no box if "HwDeviceTray should start automatically on log in" and the + * result is written to the KDE configfile. + */ +void HwDeviceSystemTray::_quit () { + r_config = new KSimpleConfig("hwdevicetrayrc"); + + TQString tmp1 = i18n ("Start hardware device tray automatically when you log in?"); + int tmp2 = KMessageBox::questionYesNo (0, tmp1, i18n("Question"), i18n("Start Automatically"), i18n("Do Not Start")); + r_config->setGroup("General"); + r_config->writeEntry ("Autostart", tmp2 == KMessageBox::Yes); + r_config->sync (); + + exit(0); +} + +void HwDeviceSystemTray::resizeTrayIcon () { + // Honor Free Desktop specifications that allow for arbitrary system tray icon sizes + TQPixmap origpixmap; + TQPixmap scaledpixmap; + TQImage newIcon; + origpixmap = KSystemTray::loadSizedIcon("kcmdevices", width()); + newIcon = origpixmap; + newIcon = newIcon.smoothScale(width(), height()); + scaledpixmap = newIcon; + setPixmap(scaledpixmap); +} + +void HwDeviceSystemTray::resizeEvent (TQResizeEvent *) { + // Honor Free Desktop specifications that allow for arbitrary system tray icon sizes + resizeTrayIcon(); +} + +void HwDeviceSystemTray::showEvent (TQShowEvent *) { + // Honor Free Desktop specifications that allow for arbitrary system tray icon sizes + resizeTrayIcon(); +} + +void HwDeviceSystemTray::mousePressEvent(TQMouseEvent* e) { + // Popup the context menu with left-click + if (e->button() == Qt::LeftButton) { + contextMenuAboutToShow(contextMenu()); + contextMenu()->popup(e->globalPos()); + e->accept(); + return; + } + + KSystemTray::mousePressEvent(e); +} + +bool HwDeviceSystemTray::isMonitoredDevice(TDEStorageDevice* sdevice) { + // Type selection logic largely duplicated from the media manager tdeioslave + if (((sdevice->isDiskOfType(TDEDiskDeviceType::LUKS) + || sdevice->checkDiskStatus(TDEDiskDeviceStatus::ContainsFilesystem) + || sdevice->isDiskOfType(TDEDiskDeviceType::CDAudio) + || sdevice->checkDiskStatus(TDEDiskDeviceStatus::Blank)) + && !sdevice->checkDiskStatus(TDEDiskDeviceStatus::UsedByDevice) + && !sdevice->checkDiskStatus(TDEDiskDeviceStatus::Hidden) + && (sdevice->isDiskOfType(TDEDiskDeviceType::HDD) + || (sdevice->isDiskOfType(TDEDiskDeviceType::CDROM)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::CDR)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::CDRW)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::CDMO)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::CDMRRW)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::CDMRRWW)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDROM)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDRAM)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDR)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDRW)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDRDL)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDRWDL)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDPLUSR)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDPLUSRW)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDPLUSRDL)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDPLUSRWDL)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::BDROM)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::BDR)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::BDRW)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::HDDVDROM)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::HDDVDR)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::HDDVDRW)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::CDAudio)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::CDVideo)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::DVDVideo)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::BDVideo)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::Floppy)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::Zip)) + || (sdevice->isDiskOfType(TDEDiskDeviceType::Jaz)))) + || (sdevice->isDiskOfType(TDEDiskDeviceType::Camera))) { + return true; + } + else { + return false; + } +} + +void HwDeviceSystemTray::contextMenuAboutToShow(TDEPopupMenu* menu) { + menu->clear(); + menu->setCheckable(true); + + populateMenu(menu); + + menu->insertTitle(SmallIcon("configure"), i18n("Global Configuration")); + + TDEAction *actHardwareConfig = new TDEAction(i18n("Configure Hardware..."), SmallIconSet("kcmpci"), TDEShortcut(), TQT_TQOBJECT(this), TQT_SLOT(slotHardwareConfig()), actionCollection()); + actHardwareConfig->plug(menu); + + TDEAction *actShortcutKeys = new TDEAction(i18n("Configure Shortcut Keys..."), SmallIconSet("configure"), TDEShortcut(), TQT_TQOBJECT(this), TQT_SLOT(slotEditShortcutKeys()), actionCollection()); + actShortcutKeys->plug(menu); + + menu->insertItem(SmallIcon("help"), KStdGuiItem::help().text(), m_help->menu()); + TDEAction *quitAction = actionCollection()->action(KStdAction::name(KStdAction::Quit)); + quitAction->plug(menu); + + m_menu = menu; +} + +void HwDeviceSystemTray::configChanged() { + // +} + +void HwDeviceSystemTray::populateMenu(TDEPopupMenu* menu) { + int lastMountIndex; + int lastUnmountIndex; + TDEGenericDevice *hwdevice; + + TDEActionMenu* mountDiskActionMenu = static_cast<TDEActionMenu*>(actionCollection()->action("mount_menu")); + mountDiskActionMenu->popupMenu()->clear(); + m_mountMenuIndexMap.clear(); + TDEActionMenu* unmountDiskActionMenu = static_cast<TDEActionMenu*>(actionCollection()->action("unmount_menu")); + unmountDiskActionMenu->popupMenu()->clear(); + m_mountMenuIndexMap.clear(); + + menu->insertTitle(SmallIcon("drive-harddisk"), i18n("Storage Devices")); + + // Find all storage devices and add them to the popup menu + lastMountIndex = 1; + lastUnmountIndex = 1; + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList diskDeviceList = hwdevices->listByDeviceClass(TDEGenericDeviceType::Disk); + for (hwdevice = diskDeviceList.first(); hwdevice; hwdevice = diskDeviceList.next()) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(hwdevice); + if (isMonitoredDevice(sdevice)) { + lastMountIndex = mountDiskActionMenu->popupMenu()->insertItem(hwdevice->icon(TDEIcon::SizeSmall), i18n("%1 (%2)").arg(sdevice->friendlyName(), sdevice->deviceNode())); + mountDiskActionMenu->popupMenu()->connectItem(lastMountIndex, this, TQT_SLOT(slotMountDevice(int))); + m_mountMenuIndexMap[lastMountIndex] = sdevice->diskUUID(); + if (m_mountMenuIndexMap[lastMountIndex] == "") { + m_mountMenuIndexMap[lastMountIndex] = sdevice->systemPath(); + } + if (sdevice->mountPath() != TQString::null) { + lastUnmountIndex = unmountDiskActionMenu->popupMenu()->insertItem(hwdevice->icon(TDEIcon::SizeSmall), i18n("%1 (%2)").arg(sdevice->friendlyName(), sdevice->deviceNode())); + unmountDiskActionMenu->popupMenu()->connectItem(lastUnmountIndex, this, TQT_SLOT(slotUnmountDevice(int))); + m_unmountMenuIndexMap[lastUnmountIndex] = sdevice->diskUUID(); + if (m_unmountMenuIndexMap[lastMountIndex] == "") { + m_unmountMenuIndexMap[lastMountIndex] = sdevice->systemPath(); + } + } + } + } + + if (lastMountIndex == 0) { + mountDiskActionMenu->setEnabled(false); + } + else { + mountDiskActionMenu->setEnabled(true); + } + if (lastUnmountIndex == 0) { + unmountDiskActionMenu->setEnabled(false); + } + else { + unmountDiskActionMenu->setEnabled(true); + } + + mountDiskActionMenu->plug(menu); + unmountDiskActionMenu->plug(menu); +} + +void HwDeviceSystemTray::slotMountDevice(int parameter) +{ + TDEGenericDevice *hwdevice; + TQString uuid = m_mountMenuIndexMap[parameter]; + if (uuid != "") { + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList diskDeviceList = hwdevices->listByDeviceClass(TDEGenericDeviceType::Disk); + for (hwdevice = diskDeviceList.first(); hwdevice; hwdevice = diskDeviceList.next()) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(hwdevice); + if ((sdevice->diskUUID() == uuid) || (sdevice->systemPath() == uuid)) { + if (sdevice->isDiskOfType(TDEDiskDeviceType::Camera)) { + new KRun(TQString("media:/%1").arg(sdevice->friendlyName())); + } + else { + new KRun(TQString("system:/media/%1").arg(TQFileInfo(sdevice->deviceNode()).baseName(true))); + } + return; + } + } + } +} + +void HwDeviceSystemTray::slotUnmountDevice(int parameter) +{ + TDEGenericDevice *hwdevice; + TQString uuid = m_unmountMenuIndexMap[parameter]; + if (uuid != "") { + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList diskDeviceList = hwdevices->listByDeviceClass(TDEGenericDeviceType::Disk); + for (hwdevice = diskDeviceList.first(); hwdevice; hwdevice = diskDeviceList.next()) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(hwdevice); + if ((sdevice->diskUUID() == uuid) || (sdevice->systemPath() == uuid)) { + if (sdevice->mountPath() != TQString::null) { + int retcode; + TQString errstr; + if (!sdevice->unmountDevice(&errstr, &retcode)) { + KMessageBox::error(0, i18n("<qt><b>Unable to eject device</b><p>Detailed error information:<br>%1 (code %2)</qt>").arg(errstr).arg(retcode), i18n("Eject Failed")); + } + return; + } + } + } + } +} + +void HwDeviceSystemTray::slotHardwareConfig() { + KCMultiDialog *kcm = new KCMultiDialog(KDialogBase::Plain, i18n("Configure"), this); + + kcm->addModule("hwmanager"); + kcm->setPlainCaption(i18n("Configure Hardware")); + kcm->exec(); +} + +void HwDeviceSystemTray::slotSettingsChanged(int category) { + if (category == (int) TDEApplication::SETTINGS_SHORTCUTS) { + globalKeys->readSettings(); + globalKeys->updateConnections(); + } +} + +void HwDeviceSystemTray::slotEditShortcutKeys() { + ConfigDialog *dlg = new ConfigDialog(globalKeys, true); + + if (dlg->exec() == TQDialog::Accepted) { + dlg->commitShortcuts(); + globalKeys->writeSettings(0, true); + globalKeys->updateConnections(); + } + + delete dlg; +} + +void HwDeviceSystemTray::deviceAdded(TDEGenericDevice* device) { +#ifdef __TDE_HAVE_TDEHWLIB + if (device->type() == TDEGenericDeviceType::Disk) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(device); + if (isMonitoredDevice(sdevice)) { + TQString uuid = sdevice->diskUUID(); + if (uuid == "") { + uuid = sdevice->systemPath(); + } + m_hardwareNotifierContainer->displayMessage( + i18n("A disk device has been added!"), + i18n("%1 (%2)").arg(sdevice->friendlyName(), sdevice->deviceNode()), SmallIcon("drive-harddisk"), + 0, 0, "ADD: " + uuid); + } + } +#endif +} + +void HwDeviceSystemTray::deviceRemoved(TDEGenericDevice* device) { +#ifdef __TDE_HAVE_TDEHWLIB + if (device->type() == TDEGenericDeviceType::Disk) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(device); + if (isMonitoredDevice(sdevice)) { + TQString uuid = sdevice->diskUUID(); + if (uuid == "") { + uuid = sdevice->systemPath(); + } + m_hardwareNotifierContainer->displayMessage( + i18n("A disk device has been removed!"), + i18n("%1 (%2)").arg(sdevice->friendlyName(), sdevice->deviceNode()), SmallIcon("drive-harddisk"), + 0, 0, "REMOVE: " + uuid); + } + } +#endif +} + +void HwDeviceSystemTray::deviceChanged(TDEGenericDevice* device) { +#ifdef __TDE_HAVE_TDEHWLIB + if (device->type() == TDEGenericDeviceType::Disk) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(device); + if (isMonitoredDevice(sdevice)) { + TQString uuid = sdevice->diskUUID(); + if (uuid == "") { + uuid = sdevice->systemPath(); + } + m_hardwareNotifierContainer->displayMessage( + i18n("A disk device has been changed!"), + i18n("%1 (%2)").arg(sdevice->friendlyName(), sdevice->deviceNode()), SmallIcon("drive-harddisk"), + 0, 0, "CHANGE: " + uuid); + } + } +#endif +} + +void HwDeviceSystemTray::devicePopupClicked(KPassivePopup* popup, TQPoint point, TQString uuid) { + TDEGenericDevice *hwdevice; + if (uuid.startsWith("ADD: ")) { + uuid = uuid.right(uuid.length() - strlen("ADD: ")); + if (uuid != "") { + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList diskDeviceList = hwdevices->listByDeviceClass(TDEGenericDeviceType::Disk); + for (hwdevice = diskDeviceList.first(); hwdevice; hwdevice = diskDeviceList.next()) { + TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(hwdevice); + if ((sdevice->diskUUID() == uuid) || (sdevice->systemPath() == uuid)) { + // Pop up full media notification dialog + DCOPClient* dcopClient = TDEApplication::dcopClient(); + TQByteArray data; + TQDataStream arg(data, IO_WriteOnly); + bool allowNotification = true; + if (sdevice->isDiskOfType(TDEDiskDeviceType::Camera)) { + arg << sdevice->friendlyName(); + } + else { + arg << TQFileInfo(sdevice->deviceNode()).baseName(true); + } + arg << allowNotification; + dcopClient->send("kded", "medianotifier", "onMediumChange(TQString, bool)", data); + return; + } + } + } + } +} + +void HwDeviceSystemTray::slotHelpContents() { + kapp->invokeHelp(TQString::null, "hwdevicetray"); +} + +#include "hwdevicetray.moc"
\ No newline at end of file diff --git a/kcontrol/hwmanager/hwdevicetray.desktop b/kcontrol/hwmanager/hwdevicetray.desktop new file mode 100644 index 000000000..20a0297ce --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=tdehwdevicetray +GenericName=Hardware Device Monitor +Comment=Monitor hardware devices from the system tray +Exec=tdehwdevicetray +Icon=kcmdevices +Type=Application +OnlyShowIn=TDE; +Categories=Qt;TDE;System; +X-DocPath=tdehwdevicetray/index.html diff --git a/kcontrol/hwmanager/hwdevicetray.h b/kcontrol/hwmanager/hwdevicetray.h new file mode 100644 index 000000000..d49f5b4b3 --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray.h @@ -0,0 +1,95 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of hwdevicetray, the TDE Hardware Device Monitor System Tray Application + * + * hwdevicetray 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. + * + * hwdevicetray 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#ifndef TDEHWDEVICETRAY_H +#define TDEHWDEVICETRAY_H + +#include <tqptrlist.h> + +#include <ksystemtray.h> +#include <kglobalaccel.h> +#include <ksimpleconfig.h> +#include <tdepassivepopupstack.h> + +#ifdef __TDE_HAVE_TDEHWLIB +#include <tdehardwaredevices.h> +#else +#define TDEGenericDevice void +#endif + +class KHelpMenu; +class TDEPopupMenu; + +typedef TQMap<int, TQString> TQStringMap; + +class HwDeviceSystemTray : public KSystemTray +{ + Q_OBJECT + +public: + HwDeviceSystemTray(TQWidget* parent = 0, const char *name = 0); + ~HwDeviceSystemTray(); + TDEGlobalAccel *globalKeys; + + virtual void contextMenuAboutToShow(TDEPopupMenu* menu); + + void configChanged(); + +protected slots: + void slotHardwareConfig(); + void slotEditShortcutKeys(); + void slotSettingsChanged(int category); + void slotHelpContents(); + + void slotMountDevice(int parameter); + void slotUnmountDevice(int parameter); + +protected: + void mousePressEvent(TQMouseEvent *e); + void resizeEvent(TQResizeEvent *); + void showEvent(TQShowEvent *); + +private slots: + void _quit(); + void deviceAdded(TDEGenericDevice*); + void deviceRemoved(TDEGenericDevice*); + void deviceChanged(TDEGenericDevice*); + + void devicePopupClicked(KPassivePopup*, TQPoint, TQString); + +private: + bool isMonitoredDevice(TDEStorageDevice* sdevice); + +private: + void populateMenu(TDEPopupMenu* menu); + void resizeTrayIcon(); + + bool m_popupUp; + KHelpMenu* m_help; + + TQWidget* m_parent; + TDEPassivePopupStackContainer* m_hardwareNotifierContainer; + + TQStringMap m_mountMenuIndexMap; + TQStringMap m_unmountMenuIndexMap; + TDEPopupMenu* m_menu; + KSimpleConfig *r_config; +}; + +#endif diff --git a/kcontrol/hwmanager/hwdevicetray_app.cpp b/kcontrol/hwmanager/hwdevicetray_app.cpp new file mode 100644 index 000000000..3f96f76a4 --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray_app.cpp @@ -0,0 +1,32 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of hwdevicetray, the TDE Hardware Device Monitor System Tray Application + * + * hwdevicetray 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. + * + * hwdevicetray 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#include <kdebug.h> + +#include "hwdevicetray_app.h" + +#include "hwdevicetray.h" + +HwDeviceApp::HwDeviceApp() + : m_tray(new HwDeviceSystemTray(0L, "HwDeviceTray")) +{ + m_tray->show(); +} + +#include "hwdevicetray_app.moc"
\ No newline at end of file diff --git a/kcontrol/hwmanager/hwdevicetray_app.h b/kcontrol/hwmanager/hwdevicetray_app.h new file mode 100644 index 000000000..fae4d6cd9 --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray_app.h @@ -0,0 +1,39 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of hwdevicetray, the TDE Hardware Device Monitor System Tray Application + * + * hwdevicetray 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. + * + * hwdevicetray 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#ifndef TDEHWDEVICEAPP_H +#define TDEHWDEVICEAPP_H + +#include <tqtimer.h> +#include <kuniqueapplication.h> + +class HwDeviceSystemTray; + +class HwDeviceApp : public KUniqueApplication +{ + Q_OBJECT + + public: + HwDeviceApp(); + + private: + HwDeviceSystemTray* m_tray; +}; + +#endif diff --git a/kcontrol/hwmanager/hwdevicetray_bindings.cpp b/kcontrol/hwmanager/hwdevicetray_bindings.cpp new file mode 100644 index 000000000..216b1a709 --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray_bindings.cpp @@ -0,0 +1,34 @@ +// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8; -*- +/* This file is part of the KDE project + Copyright (C) by Andrew Stanley-Jones + + 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; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef NOSLOTS +# define DEF( name, key3, key4, fnSlot ) \ + keys->insert( name, i18n(name), TQString(), key3, key4, TQT_TQOBJECT(this), TQT_SLOT(fnSlot) ) +#else +# define DEF( name, key3, key4, fnSlot ) \ + keys->insert( name, i18n(name), TQString(), key3, key4 ) +#endif +#define WIN KKey::QtWIN + + keys->insert( "Program:hwdevicetray", i18n("Hardware Device Control") ); + + // DEF( I18N_NOOP("Switch Displays"), TDEShortcut(TQString("XF86Display")), TDEShortcut(TQString("XF86Display")), slotCycleDisplays() ); + +#undef DEF +#undef WIN diff --git a/kcontrol/hwmanager/hwdevicetray_configdialog.cpp b/kcontrol/hwmanager/hwdevicetray_configdialog.cpp new file mode 100644 index 000000000..648cdd72f --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray_configdialog.cpp @@ -0,0 +1,78 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of hwdevicetray, the TDE Hardware Device Monitor System Tray Application + * + * hwdevicetray 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. + * + * hwdevicetray 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqlistview.h> +#include <tqpushbutton.h> +#include <tqtooltip.h> +#include <tqwhatsthis.h> +#include <tqvbuttongroup.h> +#include <assert.h> + +#include <kiconloader.h> +#include <tdelocale.h> +#include <tdepopupmenu.h> +#include <twinmodule.h> +#include <kregexpeditorinterface.h> +#include <tdeparts/componentfactory.h> + +#include "hwdevicetray_configdialog.h" + +ConfigDialog::ConfigDialog(TDEGlobalAccel *accel, bool isApplet) + : KDialogBase(Tabbed, i18n("Configure"), Ok | Cancel | Help, Ok, 0L, "config dialog") { + if (isApplet) { + setHelp(TQString::null, "tderandrtray"); + } + + TQFrame *w = 0L; // the parent for the widgets + + w = addVBoxPage(i18n("Global &Shortcuts")); + keysWidget = new KKeyChooser(accel, w); +} + + +ConfigDialog::~ConfigDialog() { +} + +// prevent huge size due to long regexps in the action-widget +void ConfigDialog::show() { + if (!isVisible()) { + KWinModule module(0, KWinModule::INFO_DESKTOP); + TQSize s1 = sizeHint(); + TQSize s2 = module.workArea().size(); + int w = s1.width(); + int h = s1.height(); + + if (s1.width() >= s2.width()) + w = s2.width(); + if (s1.height() >= s2.height()) + h = s2.height(); + + resize(w, h); + } + + KDialogBase::show(); +} + +void ConfigDialog::commitShortcuts() { + keysWidget->commitChanges(); +} + +#include "hwdevicetray_configdialog.moc" diff --git a/kcontrol/hwmanager/hwdevicetray_configdialog.h b/kcontrol/hwmanager/hwdevicetray_configdialog.h new file mode 100644 index 000000000..657b3ee43 --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray_configdialog.h @@ -0,0 +1,59 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of hwdevicetray, the TDE Hardware Device Monitor System Tray Application + * + * hwdevicetray 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. + * + * hwdevicetray 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#ifndef HWDEVICETRAY_CONFIGDIALOG_H +#define HWDEVICETRAY_CONFIGDIALOG_H + +#include <tqcheckbox.h> +#include <tqevent.h> +#include <tqgroupbox.h> +#include <tqheader.h> +#include <tqradiobutton.h> +#include <tqvbox.h> + +#include <kdialogbase.h> +#include <keditlistbox.h> +#include <kkeydialog.h> +#include <tdelistview.h> +#include <knuminput.h> + +class TDEGlobalAccel; +class KKeyChooser; +class TDEListView; +class TQPushButton; +class TQDialog; +class ConfigDialog; + +class ConfigDialog : public KDialogBase +{ + Q_OBJECT + + public: + ConfigDialog(TDEGlobalAccel *accel, bool isApplet ); + ~ConfigDialog(); + + virtual void show(); + void commitShortcuts(); + + private: + KKeyChooser *keysWidget; + +}; + +#endif // CONFIGDIALOG_H diff --git a/kcontrol/hwmanager/hwdevicetray_main.cpp b/kcontrol/hwmanager/hwdevicetray_main.cpp new file mode 100644 index 000000000..b16f13509 --- /dev/null +++ b/kcontrol/hwmanager/hwdevicetray_main.cpp @@ -0,0 +1,51 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of hwdevicetray, the TDE Hardware Device Monitor System Tray Application + * + * hwdevicetray 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. + * + * hwdevicetray 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#include <stdlib.h> +#include <kdebug.h> + +#include <tdelocale.h> +#include <tdecmdlineargs.h> +#include <tdeaboutdata.h> +#include <tdeglobal.h> + +#include "hwdevicetray_app.h" + +static const char hwdevicetrayVersion[] = "0.1"; +static const TDECmdLineOptions options[] = +{ + { "login", I18N_NOOP("Application is being auto-started at TDE session start"), 0L }, + TDECmdLineLastOption +}; + +int main(int argc, char **argv) +{ + TDEAboutData aboutData("hwdevicetray", I18N_NOOP("Hardware Device Monitor"), hwdevicetrayVersion, I18N_NOOP("Hardware Device Monitor Tray Application"), TDEAboutData::License_GPL_V3, "(c) 2015 Timothy Pearson", 0L, ""); + aboutData.addAuthor("Timothy Pearson",I18N_NOOP("Initial developer and maintainer"), "kb9vqf@pearsoncomputing.net"); + aboutData.setProductName("hwdevices/hwdevicetray"); + TDEGlobal::locale()->setMainCatalogue("hwdevicetray"); + + TDECmdLineArgs::init(argc,argv,&aboutData); + TDECmdLineArgs::addCmdLineOptions(options); + TDEApplication::addCmdLineOptions(); + + HwDeviceApp app; + + return app.exec(); +} diff --git a/kcontrol/hwmanager/hwmanager.cpp b/kcontrol/hwmanager/hwmanager.cpp index a82daf1be..1cd8b04e0 100644 --- a/kcontrol/hwmanager/hwmanager.cpp +++ b/kcontrol/hwmanager/hwmanager.cpp @@ -42,11 +42,14 @@ #include <kgenericfactory.h> #include <unistd.h> +#include <kpassdlg.h> #include <ksimpleconfig.h> #include <string> #include <stdio.h> #include <tqstring.h> +#include <tdecryptographiccarddevice.h> + #include "hwmanager.h" using namespace std; @@ -144,6 +147,12 @@ void TDEHWManager::populateTreeView() TDEGenericHardwareList hwlist = hwdevices->listByDeviceClass(TDEGenericDeviceType::RootSystem); TDEGenericDevice *hwdevice; for ( hwdevice = hwlist.first(); hwdevice; hwdevice = hwlist.next() ) { + if (hwdevice->type() == TDEGenericDeviceType::CryptographicCard) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + connect(cdevice, SIGNAL(pinRequested(TQString,TDECryptographicCardDevice*)), this, SLOT(cryptographicCardPinRequested(TQString,TDECryptographicCardDevice*))); + cdevice->enableCardMonitoring(true); + cdevice->enablePINEntryCallbacks(true); + } DeviceIconItem* item = new DeviceIconItem(base->deviceTree, hwdevice->detailedFriendlyName(), hwdevice->icon(base->deviceTree->iconSize()), hwdevice); if ((!selected_syspath.isNull()) && (hwdevice->systemPath() == selected_syspath)) { base->deviceTree->ensureItemVisible(item); @@ -160,6 +169,12 @@ void TDEHWManager::populateTreeView() TDEGenericDevice *hwdevice; TDEGenericHardwareList hwlist = hwdevices->listByDeviceClass((TDEGenericDeviceType::TDEGenericDeviceType)i); for ( hwdevice = hwlist.first(); hwdevice; hwdevice = hwlist.next() ) { + if (hwdevice->type() == TDEGenericDeviceType::CryptographicCard) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + connect(cdevice, SIGNAL(pinRequested(TQString,TDECryptographicCardDevice*)), this, SLOT(cryptographicCardPinRequested(TQString,TDECryptographicCardDevice*))); + cdevice->enableCardMonitoring(true); + cdevice->enablePINEntryCallbacks(true); + } DeviceIconItem* item = new DeviceIconItem(rootitem, hwdevice->detailedFriendlyName(), hwdevice->icon(base->deviceTree->iconSize()), hwdevice); if ((!selected_syspath.isNull()) && (hwdevice->systemPath() == selected_syspath)) { base->deviceTree->ensureItemVisible(item); @@ -177,6 +192,12 @@ void TDEHWManager::populateTreeViewLeaf(DeviceIconItem *parent, bool show_by_con TDEGenericHardwareList hwlist = hwdevices->listAllPhysicalDevices(); TDEGenericDevice *hwdevice; for ( hwdevice = hwlist.first(); hwdevice; hwdevice = hwlist.next() ) { + if (hwdevice->type() == TDEGenericDeviceType::CryptographicCard) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + connect(cdevice, SIGNAL(pinRequested(TQString,TDECryptographicCardDevice*)), this, SLOT(cryptographicCardPinRequested(TQString,TDECryptographicCardDevice*))); + cdevice->enableCardMonitoring(true); + cdevice->enablePINEntryCallbacks(true); + } if (hwdevice->parentDevice() == parent->device()) { DeviceIconItem* item = new DeviceIconItem(parent, hwdevice->detailedFriendlyName(), hwdevice->icon(base->deviceTree->iconSize()), hwdevice); if ((!selected_syspath.isNull()) && (hwdevice->systemPath() == selected_syspath)) { @@ -207,6 +228,17 @@ void TDEHWManager::deviceChanged(TDEGenericDevice* device) { } } +void TDEHWManager::cryptographicCardPinRequested(TQString prompt, TDECryptographicCardDevice* cdevice) { + TQCString password; + int result = KPasswordDialog::getPassword(password, prompt); + if (result == KPasswordDialog::Accepted) { + cdevice->setProvidedPin(password); + } + else { + cdevice->setProvidedPin(TQString::null); + } +} + TQString TDEHWManager::quickHelp() const { return i18n("<h1>TDE Hardware Device Manager</h1> This module allows you to configure hardware devices on your system"); diff --git a/kcontrol/hwmanager/hwmanager.desktop b/kcontrol/hwmanager/hwmanager.desktop index 161c331bd..d0ef60728 100644 --- a/kcontrol/hwmanager/hwmanager.desktop +++ b/kcontrol/hwmanager/hwmanager.desktop @@ -1,6 +1,6 @@ [Desktop Entry] Exec=tdecmshell hwmanager -Icon=background +Icon=hwinfo Type=Application X-DocPath=kcontrol/hwmanager/index.html diff --git a/kcontrol/hwmanager/hwmanager.h b/kcontrol/hwmanager/hwmanager.h index b75a494d9..abc05fa54 100644 --- a/kcontrol/hwmanager/hwmanager.h +++ b/kcontrol/hwmanager/hwmanager.h @@ -61,6 +61,7 @@ private slots: void populateTreeView(); void populateTreeViewLeaf(DeviceIconItem *parent, bool show_by_connection, TQString selected_syspath); void deviceChanged(TDEGenericDevice*); + void cryptographicCardPinRequested(TQString prompt, TDECryptographicCardDevice* cdevice); private: TDEHWManagerBase *base; diff --git a/kcontrol/input/pics/doubleclick_1.png b/kcontrol/input/pics/doubleclick_1.png Binary files differindex 33bfb6618..58e930a5d 100644 --- a/kcontrol/input/pics/doubleclick_1.png +++ b/kcontrol/input/pics/doubleclick_1.png diff --git a/kcontrol/input/pics/doubleclick_2.png b/kcontrol/input/pics/doubleclick_2.png Binary files differindex 4f7a9cd5b..2ff96ec6d 100644 --- a/kcontrol/input/pics/doubleclick_2.png +++ b/kcontrol/input/pics/doubleclick_2.png diff --git a/kcontrol/input/pics/mouse_lh.png b/kcontrol/input/pics/mouse_lh.png Binary files differindex acec7fe85..ce65c7b94 100644 --- a/kcontrol/input/pics/mouse_lh.png +++ b/kcontrol/input/pics/mouse_lh.png diff --git a/kcontrol/input/pics/mouse_rh.png b/kcontrol/input/pics/mouse_rh.png Binary files differindex de5cd8a86..68324c045 100644 --- a/kcontrol/input/pics/mouse_rh.png +++ b/kcontrol/input/pics/mouse_rh.png diff --git a/kcontrol/kcontrol/about/top-right-kcontrol.png b/kcontrol/kcontrol/about/top-right-kcontrol.png Binary files differindex a615af44d..8461f07c8 100644 --- a/kcontrol/kcontrol/about/top-right-kcontrol.png +++ b/kcontrol/kcontrol/about/top-right-kcontrol.png diff --git a/kcontrol/kcontrol/cr128-app-kcontrol.png b/kcontrol/kcontrol/cr128-app-kcontrol.png Binary files differindex 99a89e323..db7c6a6da 100644 --- a/kcontrol/kcontrol/cr128-app-kcontrol.png +++ b/kcontrol/kcontrol/cr128-app-kcontrol.png diff --git a/kcontrol/kcontrol/cr16-app-kcontrol.png b/kcontrol/kcontrol/cr16-app-kcontrol.png Binary files differindex 64bf8b71d..ea9f091ce 100644 --- a/kcontrol/kcontrol/cr16-app-kcontrol.png +++ b/kcontrol/kcontrol/cr16-app-kcontrol.png diff --git a/kcontrol/kcontrol/cr32-app-kcontrol.png b/kcontrol/kcontrol/cr32-app-kcontrol.png Binary files differindex 6537ba75e..0d95d9fa8 100644 --- a/kcontrol/kcontrol/cr32-app-kcontrol.png +++ b/kcontrol/kcontrol/cr32-app-kcontrol.png diff --git a/kcontrol/kcontrol/cr48-app-kcontrol.png b/kcontrol/kcontrol/cr48-app-kcontrol.png Binary files differindex bde85be5f..97d3d3c2d 100644 --- a/kcontrol/kcontrol/cr48-app-kcontrol.png +++ b/kcontrol/kcontrol/cr48-app-kcontrol.png diff --git a/kcontrol/kcontrol/cr64-app-kcontrol.png b/kcontrol/kcontrol/cr64-app-kcontrol.png Binary files differindex 4d4db5d65..9d5d0bd17 100644 --- a/kcontrol/kcontrol/cr64-app-kcontrol.png +++ b/kcontrol/kcontrol/cr64-app-kcontrol.png diff --git a/kcontrol/knotify/play.png b/kcontrol/knotify/play.png Binary files differindex e0daeb8c9..abc81b29c 100644 --- a/kcontrol/knotify/play.png +++ b/kcontrol/knotify/play.png diff --git a/kcontrol/konq/onlyone.png b/kcontrol/konq/onlyone.png Binary files differindex 7033763f3..4b4ad273d 100644 --- a/kcontrol/konq/onlyone.png +++ b/kcontrol/konq/onlyone.png diff --git a/kcontrol/konq/overlapping.png b/kcontrol/konq/overlapping.png Binary files differindex 145234576..833c893c7 100644 --- a/kcontrol/konq/overlapping.png +++ b/kcontrol/konq/overlapping.png diff --git a/kcontrol/konq/previews.cpp b/kcontrol/konq/previews.cpp index 1f7bf85c4..3b2349fc7 100644 --- a/kcontrol/konq/previews.cpp +++ b/kcontrol/konq/previews.cpp @@ -126,8 +126,8 @@ KPreviewOptions::KPreviewOptions( TQWidget *parent, const char */*name*/ ) m_maxSize = new KDoubleNumInput( this ); m_maxSize->setSuffix( i18n(" MB") ); - m_maxSize->setRange( 0.02, 10, 0.02, true ); m_maxSize->setPrecision( 1 ); + m_maxSize->setRange( 0.2, 100, 0.2, true ); label->setBuddy( m_maxSize ); lay->addWidget( m_maxSize ); connect( m_maxSize, TQT_SIGNAL( valueChanged(double) ), TQT_SLOT( changed() ) ); diff --git a/kcontrol/krdb/ad/WPerfect.ad b/kcontrol/krdb/ad/WPerfect.ad index f005d8452..ed9da05b2 100644 --- a/kcontrol/krdb/ad/WPerfect.ad +++ b/kcontrol/krdb/ad/WPerfect.ad @@ -41,8 +41,7 @@ WPFMShell*XmDialogShell*XmTextField*foreground: WINDOW_FOREGROUND XWp*XmDialogShell*background: BACKGROUND XWp*XmDialogShell*XmScrolledWindow*XmDrawingArea.background: WINDOW_BACKGROUND WPFMShell*XmDialogShell*background: WINDOW_BACKGROUND -WPFMShell*XmDialogShell*XmScrolledWindow*XmDrawingArea.background: -WINDOW_BACKGROUND +WPFMShell*XmDialogShell*XmScrolledWindow*XmDrawingArea.background: WINDOW_BACKGROUND XWp*XmDialogShell*XmDrawingArea.background: WINDOW_BACKGROUND XWp*XmDialogShell*XmList*background: WINDOW_BACKGROUND XWp*XmDialogShell*XmText*background: WINDOW_BACKGROUND diff --git a/kcontrol/krdb/krdb.cpp b/kcontrol/krdb/krdb.cpp index a1543a320..d01bd998e 100644 --- a/kcontrol/krdb/krdb.cpp +++ b/kcontrol/krdb/krdb.cpp @@ -558,9 +558,9 @@ void runRdb( uint flags ) TDEProcess proc; #ifndef NDEBUG - proc << "xrdb" << "-merge" << "-nocpp" << tmpFile.name(); + proc << "xrdb" << "-merge" << tmpFile.name(); #else - proc << "xrdb" << "-quiet" << "-merge" << "-nocpp" << tmpFile.name(); + proc << "xrdb" << "-quiet" << "-merge" << tmpFile.name(); #endif proc.start( TDEProcess::Block, TDEProcess::Stdin ); diff --git a/kcontrol/krdb/pics/lo-energy.png b/kcontrol/krdb/pics/lo-energy.png Binary files differindex c30be6021..a97c605ef 100644 --- a/kcontrol/krdb/pics/lo-energy.png +++ b/kcontrol/krdb/pics/lo-energy.png diff --git a/kcontrol/krdb/pics/logo.png b/kcontrol/krdb/pics/logo.png Binary files differindex 126a0032a..65ea9c7d7 100644 --- a/kcontrol/krdb/pics/logo.png +++ b/kcontrol/krdb/pics/logo.png diff --git a/kcontrol/krdb/pics/mini-world.png b/kcontrol/krdb/pics/mini-world.png Binary files differindex eae412a41..94abeba38 100644 --- a/kcontrol/krdb/pics/mini-world.png +++ b/kcontrol/krdb/pics/mini-world.png diff --git a/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png b/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png Binary files differindex f91c2521c..01f917cfa 100644 --- a/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png +++ b/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png diff --git a/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png b/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png Binary files differindex d8a33765e..10f62c473 100644 --- a/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png +++ b/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png diff --git a/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png b/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png Binary files differindex f013c23e0..3e325ff16 100644 --- a/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png +++ b/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png diff --git a/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png b/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png Binary files differindex 1cf565b2e..0a1ccf1cf 100644 --- a/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png +++ b/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png diff --git a/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png b/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png Binary files differindex 68599985a..eac818419 100644 --- a/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png +++ b/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png diff --git a/kcontrol/krdb/themes/Keramik/Keramik.preview.png b/kcontrol/krdb/themes/Keramik/Keramik.preview.png Binary files differindex 8614bb20b..649431e5e 100644 --- a/kcontrol/krdb/themes/Keramik/Keramik.preview.png +++ b/kcontrol/krdb/themes/Keramik/Keramik.preview.png diff --git a/kcontrol/krdb/themes/Plastik/Plastik.preview.png b/kcontrol/krdb/themes/Plastik/Plastik.preview.png Binary files differindex a8801c28f..f9ed5329d 100644 --- a/kcontrol/krdb/themes/Plastik/Plastik.preview.png +++ b/kcontrol/krdb/themes/Plastik/Plastik.preview.png diff --git a/kcontrol/krdb/themes/Platinum/Platinum.preview.png b/kcontrol/krdb/themes/Platinum/Platinum.preview.png Binary files differindex da45cccb9..0b6215e73 100644 --- a/kcontrol/krdb/themes/Platinum/Platinum.preview.png +++ b/kcontrol/krdb/themes/Platinum/Platinum.preview.png diff --git a/kcontrol/krdb/themes/Redmond/Redmond.preview.png b/kcontrol/krdb/themes/Redmond/Redmond.preview.png Binary files differindex 2e180b33d..cea6d9250 100644 --- a/kcontrol/krdb/themes/Redmond/Redmond.preview.png +++ b/kcontrol/krdb/themes/Redmond/Redmond.preview.png diff --git a/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png b/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png Binary files differindex eee57c71e..bbeb94462 100644 --- a/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png +++ b/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png diff --git a/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png b/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png Binary files differindex d68507d42..f0d673233 100644 --- a/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png +++ b/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png diff --git a/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png b/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png Binary files differindex 874d10738..9a4953c30 100644 --- a/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png +++ b/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png diff --git a/kcontrol/locale/pics/background.png b/kcontrol/locale/pics/background.png Binary files differindex d9d64462b..c1511734d 100644 --- a/kcontrol/locale/pics/background.png +++ b/kcontrol/locale/pics/background.png diff --git a/kcontrol/pics/cr128-app-access.png b/kcontrol/pics/cr128-app-access.png Binary files differindex 5405523ea..4aa25a496 100644 --- a/kcontrol/pics/cr128-app-access.png +++ b/kcontrol/pics/cr128-app-access.png diff --git a/kcontrol/pics/cr128-app-arts.png b/kcontrol/pics/cr128-app-arts.png Binary files differindex d22e0e65d..a50216403 100644 --- a/kcontrol/pics/cr128-app-arts.png +++ b/kcontrol/pics/cr128-app-arts.png diff --git a/kcontrol/pics/cr128-app-background.png b/kcontrol/pics/cr128-app-background.png Binary files differindex d18790b09..3aff44a08 100644 --- a/kcontrol/pics/cr128-app-background.png +++ b/kcontrol/pics/cr128-app-background.png diff --git a/kcontrol/pics/cr128-app-bell.png b/kcontrol/pics/cr128-app-bell.png Binary files differindex 530fbf64a..4f5e7d966 100644 --- a/kcontrol/pics/cr128-app-bell.png +++ b/kcontrol/pics/cr128-app-bell.png diff --git a/kcontrol/pics/cr128-app-cache.png b/kcontrol/pics/cr128-app-cache.png Binary files differindex f9261381d..b7e2849f2 100644 --- a/kcontrol/pics/cr128-app-cache.png +++ b/kcontrol/pics/cr128-app-cache.png diff --git a/kcontrol/pics/cr128-app-clock.png b/kcontrol/pics/cr128-app-clock.png Binary files differindex 692b0502e..f68e5ab99 100644 --- a/kcontrol/pics/cr128-app-clock.png +++ b/kcontrol/pics/cr128-app-clock.png diff --git a/kcontrol/pics/cr128-app-colors.png b/kcontrol/pics/cr128-app-colors.png Binary files differindex 2f6bf1640..79661b26a 100644 --- a/kcontrol/pics/cr128-app-colors.png +++ b/kcontrol/pics/cr128-app-colors.png diff --git a/kcontrol/pics/cr128-app-date.png b/kcontrol/pics/cr128-app-date.png Binary files differindex 1e34bb233..6455baabd 100644 --- a/kcontrol/pics/cr128-app-date.png +++ b/kcontrol/pics/cr128-app-date.png diff --git a/kcontrol/pics/cr128-app-energy.png b/kcontrol/pics/cr128-app-energy.png Binary files differindex 4186ee48d..83d31aeae 100644 --- a/kcontrol/pics/cr128-app-energy.png +++ b/kcontrol/pics/cr128-app-energy.png diff --git a/kcontrol/pics/cr128-app-energy_star.png b/kcontrol/pics/cr128-app-energy_star.png Binary files differindex d9460449c..35bd263c7 100644 --- a/kcontrol/pics/cr128-app-energy_star.png +++ b/kcontrol/pics/cr128-app-energy_star.png diff --git a/kcontrol/pics/cr128-app-filetypes.png b/kcontrol/pics/cr128-app-filetypes.png Binary files differindex 144482335..b0576bb2f 100644 --- a/kcontrol/pics/cr128-app-filetypes.png +++ b/kcontrol/pics/cr128-app-filetypes.png diff --git a/kcontrol/pics/cr128-app-fonts.png b/kcontrol/pics/cr128-app-fonts.png Binary files differindex f859e33e7..14f8be7e8 100644 --- a/kcontrol/pics/cr128-app-fonts.png +++ b/kcontrol/pics/cr128-app-fonts.png diff --git a/kcontrol/pics/cr128-app-help_index.png b/kcontrol/pics/cr128-app-help_index.png Binary files differindex 9a1ee3fe5..4552ad675 100644 --- a/kcontrol/pics/cr128-app-help_index.png +++ b/kcontrol/pics/cr128-app-help_index.png diff --git a/kcontrol/pics/cr128-app-hwinfo.png b/kcontrol/pics/cr128-app-hwinfo.png Binary files differindex d7a3052c5..a3959759a 100644 --- a/kcontrol/pics/cr128-app-hwinfo.png +++ b/kcontrol/pics/cr128-app-hwinfo.png diff --git a/kcontrol/pics/cr128-app-kcmdevices.png b/kcontrol/pics/cr128-app-kcmdevices.png Binary files differindex 0dd12a56a..2aab3160b 100644 --- a/kcontrol/pics/cr128-app-kcmdevices.png +++ b/kcontrol/pics/cr128-app-kcmdevices.png diff --git a/kcontrol/pics/cr128-app-kcmdf.png b/kcontrol/pics/cr128-app-kcmdf.png Binary files differindex cbec02996..ab1d996eb 100644 --- a/kcontrol/pics/cr128-app-kcmdf.png +++ b/kcontrol/pics/cr128-app-kcmdf.png diff --git a/kcontrol/pics/cr128-app-kcmkwm.png b/kcontrol/pics/cr128-app-kcmkwm.png Binary files differindex 710167623..e7278ae4d 100644 --- a/kcontrol/pics/cr128-app-kcmkwm.png +++ b/kcontrol/pics/cr128-app-kcmkwm.png diff --git a/kcontrol/pics/cr128-app-kcmmemory.png b/kcontrol/pics/cr128-app-kcmmemory.png Binary files differindex 8088fef9b..fcab66fdf 100644 --- a/kcontrol/pics/cr128-app-kcmmemory.png +++ b/kcontrol/pics/cr128-app-kcmmemory.png diff --git a/kcontrol/pics/cr128-app-kcmpartitions.png b/kcontrol/pics/cr128-app-kcmpartitions.png Binary files differindex 627c52fe7..e9a76dec8 100644 --- a/kcontrol/pics/cr128-app-kcmpartitions.png +++ b/kcontrol/pics/cr128-app-kcmpartitions.png diff --git a/kcontrol/pics/cr128-app-kcmpci.png b/kcontrol/pics/cr128-app-kcmpci.png Binary files differindex efed93129..3d8340ba5 100644 --- a/kcontrol/pics/cr128-app-kcmpci.png +++ b/kcontrol/pics/cr128-app-kcmpci.png diff --git a/kcontrol/pics/cr128-app-key_bindings.png b/kcontrol/pics/cr128-app-key_bindings.png Binary files differindex 4c24fa0e4..cef5d73d9 100644 --- a/kcontrol/pics/cr128-app-key_bindings.png +++ b/kcontrol/pics/cr128-app-key_bindings.png diff --git a/kcontrol/pics/cr128-app-kthememgr.png b/kcontrol/pics/cr128-app-kthememgr.png Binary files differindex 8c496e5d3..040cc1850 100644 --- a/kcontrol/pics/cr128-app-kthememgr.png +++ b/kcontrol/pics/cr128-app-kthememgr.png diff --git a/kcontrol/pics/cr128-app-locale.png b/kcontrol/pics/cr128-app-locale.png Binary files differindex 25403acc9..223d00838 100644 --- a/kcontrol/pics/cr128-app-locale.png +++ b/kcontrol/pics/cr128-app-locale.png diff --git a/kcontrol/pics/cr128-app-multimedia.png b/kcontrol/pics/cr128-app-multimedia.png Binary files differindex 5543818ba..e9a8edf92 100644 --- a/kcontrol/pics/cr128-app-multimedia.png +++ b/kcontrol/pics/cr128-app-multimedia.png diff --git a/kcontrol/pics/cr128-app-proxy.png b/kcontrol/pics/cr128-app-proxy.png Binary files differindex ec18d5a92..30837c888 100644 --- a/kcontrol/pics/cr128-app-proxy.png +++ b/kcontrol/pics/cr128-app-proxy.png diff --git a/kcontrol/pics/cr128-app-samba.png b/kcontrol/pics/cr128-app-samba.png Binary files differindex e4867d188..e8fed2a0f 100644 --- a/kcontrol/pics/cr128-app-samba.png +++ b/kcontrol/pics/cr128-app-samba.png diff --git a/kcontrol/pics/cr128-app-stylesheet.png b/kcontrol/pics/cr128-app-stylesheet.png Binary files differindex bc911a9c9..9c2f2408c 100644 --- a/kcontrol/pics/cr128-app-stylesheet.png +++ b/kcontrol/pics/cr128-app-stylesheet.png diff --git a/kcontrol/pics/cr128-app-tdescreensaver.png b/kcontrol/pics/cr128-app-tdescreensaver.png Binary files differindex e8f036fe3..0384dfb82 100644 --- a/kcontrol/pics/cr128-app-tdescreensaver.png +++ b/kcontrol/pics/cr128-app-tdescreensaver.png diff --git a/kcontrol/pics/cr128-app-tdmconfig.png b/kcontrol/pics/cr128-app-tdmconfig.png Binary files differindex f28f704f7..3dd4cb1a9 100644 --- a/kcontrol/pics/cr128-app-tdmconfig.png +++ b/kcontrol/pics/cr128-app-tdmconfig.png diff --git a/kcontrol/pics/cr128-category-preferences-desktop-personal.png b/kcontrol/pics/cr128-category-preferences-desktop-personal.png Binary files differindex 9e033dfcc..c4359f07b 100644 --- a/kcontrol/pics/cr128-category-preferences-desktop-personal.png +++ b/kcontrol/pics/cr128-category-preferences-desktop-personal.png diff --git a/kcontrol/pics/cr128-category-preferences-desktop.png b/kcontrol/pics/cr128-category-preferences-desktop.png Binary files differindex cd1a36b9a..9eebb8a0b 100644 --- a/kcontrol/pics/cr128-category-preferences-desktop.png +++ b/kcontrol/pics/cr128-category-preferences-desktop.png diff --git a/kcontrol/pics/cr128-device-laptop.png b/kcontrol/pics/cr128-device-laptop.png Binary files differindex 0fef41bc3..a3378c7a7 100644 --- a/kcontrol/pics/cr128-device-laptop.png +++ b/kcontrol/pics/cr128-device-laptop.png diff --git a/kcontrol/pics/cr16-app-access.png b/kcontrol/pics/cr16-app-access.png Binary files differindex a952d7786..c62db119a 100644 --- a/kcontrol/pics/cr16-app-access.png +++ b/kcontrol/pics/cr16-app-access.png diff --git a/kcontrol/pics/cr16-app-agent.png b/kcontrol/pics/cr16-app-agent.png Binary files differindex 9826d3457..013e21c49 100644 --- a/kcontrol/pics/cr16-app-agent.png +++ b/kcontrol/pics/cr16-app-agent.png diff --git a/kcontrol/pics/cr16-app-arts.png b/kcontrol/pics/cr16-app-arts.png Binary files differindex cc030d391..7716d5347 100644 --- a/kcontrol/pics/cr16-app-arts.png +++ b/kcontrol/pics/cr16-app-arts.png diff --git a/kcontrol/pics/cr16-app-background.png b/kcontrol/pics/cr16-app-background.png Binary files differindex 8645b601b..63a893333 100644 --- a/kcontrol/pics/cr16-app-background.png +++ b/kcontrol/pics/cr16-app-background.png diff --git a/kcontrol/pics/cr16-app-bell.png b/kcontrol/pics/cr16-app-bell.png Binary files differindex 188410853..9dd4cac12 100644 --- a/kcontrol/pics/cr16-app-bell.png +++ b/kcontrol/pics/cr16-app-bell.png diff --git a/kcontrol/pics/cr16-app-cache.png b/kcontrol/pics/cr16-app-cache.png Binary files differindex 9d3f243ab..4b3566714 100644 --- a/kcontrol/pics/cr16-app-cache.png +++ b/kcontrol/pics/cr16-app-cache.png diff --git a/kcontrol/pics/cr16-app-clock.png b/kcontrol/pics/cr16-app-clock.png Binary files differindex dca2c7ef8..799514b91 100644 --- a/kcontrol/pics/cr16-app-clock.png +++ b/kcontrol/pics/cr16-app-clock.png diff --git a/kcontrol/pics/cr16-app-colors.png b/kcontrol/pics/cr16-app-colors.png Binary files differindex c0a67bb90..f7b63e2ec 100644 --- a/kcontrol/pics/cr16-app-colors.png +++ b/kcontrol/pics/cr16-app-colors.png diff --git a/kcontrol/pics/cr16-app-cookie.png b/kcontrol/pics/cr16-app-cookie.png Binary files differindex 16617b9f4..0054f4711 100644 --- a/kcontrol/pics/cr16-app-cookie.png +++ b/kcontrol/pics/cr16-app-cookie.png diff --git a/kcontrol/pics/cr16-app-date.png b/kcontrol/pics/cr16-app-date.png Binary files differindex fbf29f521..6025df129 100644 --- a/kcontrol/pics/cr16-app-date.png +++ b/kcontrol/pics/cr16-app-date.png diff --git a/kcontrol/pics/cr16-app-energy.png b/kcontrol/pics/cr16-app-energy.png Binary files differindex ebad43996..489e7149c 100644 --- a/kcontrol/pics/cr16-app-energy.png +++ b/kcontrol/pics/cr16-app-energy.png diff --git a/kcontrol/pics/cr16-app-energy_star.png b/kcontrol/pics/cr16-app-energy_star.png Binary files differindex 52507f80a..f13297d75 100644 --- a/kcontrol/pics/cr16-app-energy_star.png +++ b/kcontrol/pics/cr16-app-energy_star.png diff --git a/kcontrol/pics/cr16-app-enhanced_browsing.png b/kcontrol/pics/cr16-app-enhanced_browsing.png Binary files differindex d9023041c..822449072 100644 --- a/kcontrol/pics/cr16-app-enhanced_browsing.png +++ b/kcontrol/pics/cr16-app-enhanced_browsing.png diff --git a/kcontrol/pics/cr16-app-filetypes.png b/kcontrol/pics/cr16-app-filetypes.png Binary files differindex e6d7266cf..18d419e99 100644 --- a/kcontrol/pics/cr16-app-filetypes.png +++ b/kcontrol/pics/cr16-app-filetypes.png diff --git a/kcontrol/pics/cr16-app-fonts.png b/kcontrol/pics/cr16-app-fonts.png Binary files differindex 78d71d03a..c9aa86201 100644 --- a/kcontrol/pics/cr16-app-fonts.png +++ b/kcontrol/pics/cr16-app-fonts.png diff --git a/kcontrol/pics/cr16-app-help_index.png b/kcontrol/pics/cr16-app-help_index.png Binary files differindex 1cb23431b..5b9b8c0fc 100644 --- a/kcontrol/pics/cr16-app-help_index.png +++ b/kcontrol/pics/cr16-app-help_index.png diff --git a/kcontrol/pics/cr16-app-hwinfo.png b/kcontrol/pics/cr16-app-hwinfo.png Binary files differindex 99889980d..730057b36 100644 --- a/kcontrol/pics/cr16-app-hwinfo.png +++ b/kcontrol/pics/cr16-app-hwinfo.png diff --git a/kcontrol/pics/cr16-app-icons.png b/kcontrol/pics/cr16-app-icons.png Binary files differindex 10d2a2d63..b3a9c31b7 100644 --- a/kcontrol/pics/cr16-app-icons.png +++ b/kcontrol/pics/cr16-app-icons.png diff --git a/kcontrol/pics/cr16-app-iconthemes.png b/kcontrol/pics/cr16-app-iconthemes.png Binary files differindex 4a9081564..aeedbb31a 100644 --- a/kcontrol/pics/cr16-app-iconthemes.png +++ b/kcontrol/pics/cr16-app-iconthemes.png diff --git a/kcontrol/pics/cr16-app-ieee1394.png b/kcontrol/pics/cr16-app-ieee1394.png Binary files differindex b7cec0007..320a63331 100644 --- a/kcontrol/pics/cr16-app-ieee1394.png +++ b/kcontrol/pics/cr16-app-ieee1394.png diff --git a/kcontrol/pics/cr16-app-kcmdevices.png b/kcontrol/pics/cr16-app-kcmdevices.png Binary files differindex c7c34a1a7..60625e1c8 100644 --- a/kcontrol/pics/cr16-app-kcmdevices.png +++ b/kcontrol/pics/cr16-app-kcmdevices.png diff --git a/kcontrol/pics/cr16-app-kcmkicker.png b/kcontrol/pics/cr16-app-kcmkicker.png Binary files differindex 0d04030fc..2331a29e0 100644 --- a/kcontrol/pics/cr16-app-kcmkicker.png +++ b/kcontrol/pics/cr16-app-kcmkicker.png diff --git a/kcontrol/pics/cr16-app-kcmkwm.png b/kcontrol/pics/cr16-app-kcmkwm.png Binary files differindex 775b96556..6bc50e3b8 100644 --- a/kcontrol/pics/cr16-app-kcmkwm.png +++ b/kcontrol/pics/cr16-app-kcmkwm.png diff --git a/kcontrol/pics/cr16-app-kcmmemory.png b/kcontrol/pics/cr16-app-kcmmemory.png Binary files differindex 6ddeddb68..55f23b7bc 100644 --- a/kcontrol/pics/cr16-app-kcmmemory.png +++ b/kcontrol/pics/cr16-app-kcmmemory.png diff --git a/kcontrol/pics/cr16-app-kcmmidi.png b/kcontrol/pics/cr16-app-kcmmidi.png Binary files differindex 4283b35f3..433e6ebab 100644 --- a/kcontrol/pics/cr16-app-kcmmidi.png +++ b/kcontrol/pics/cr16-app-kcmmidi.png diff --git a/kcontrol/pics/cr16-app-kcmpartitions.png b/kcontrol/pics/cr16-app-kcmpartitions.png Binary files differindex 5b6eb8764..ac33cc6a9 100644 --- a/kcontrol/pics/cr16-app-kcmpartitions.png +++ b/kcontrol/pics/cr16-app-kcmpartitions.png diff --git a/kcontrol/pics/cr16-app-kcmpci.png b/kcontrol/pics/cr16-app-kcmpci.png Binary files differindex 0ac401c6f..f7a607e12 100644 --- a/kcontrol/pics/cr16-app-kcmpci.png +++ b/kcontrol/pics/cr16-app-kcmpci.png diff --git a/kcontrol/pics/cr16-app-kcmprocessor.png b/kcontrol/pics/cr16-app-kcmprocessor.png Binary files differindex b7dc9b4d1..d87670dbc 100644 --- a/kcontrol/pics/cr16-app-kcmprocessor.png +++ b/kcontrol/pics/cr16-app-kcmprocessor.png diff --git a/kcontrol/pics/cr16-app-kcmscsi.png b/kcontrol/pics/cr16-app-kcmscsi.png Binary files differindex 2ac53532a..bfb82fd73 100644 --- a/kcontrol/pics/cr16-app-kcmscsi.png +++ b/kcontrol/pics/cr16-app-kcmscsi.png diff --git a/kcontrol/pics/cr16-app-kcmsound.png b/kcontrol/pics/cr16-app-kcmsound.png Binary files differindex dbf51d203..df9e473ca 100644 --- a/kcontrol/pics/cr16-app-kcmsound.png +++ b/kcontrol/pics/cr16-app-kcmsound.png diff --git a/kcontrol/pics/cr16-app-kcmx.png b/kcontrol/pics/cr16-app-kcmx.png Binary files differindex 29ea2da85..d31bb3f68 100644 --- a/kcontrol/pics/cr16-app-kcmx.png +++ b/kcontrol/pics/cr16-app-kcmx.png diff --git a/kcontrol/pics/cr16-app-key_bindings.png b/kcontrol/pics/cr16-app-key_bindings.png Binary files differindex 26266f1b1..151c13213 100644 --- a/kcontrol/pics/cr16-app-key_bindings.png +++ b/kcontrol/pics/cr16-app-key_bindings.png diff --git a/kcontrol/pics/cr16-app-keyboard.png b/kcontrol/pics/cr16-app-keyboard.png Binary files differindex 198d20221..e102dd721 100644 --- a/kcontrol/pics/cr16-app-keyboard.png +++ b/kcontrol/pics/cr16-app-keyboard.png diff --git a/kcontrol/pics/cr16-app-keyboard_layout.png b/kcontrol/pics/cr16-app-keyboard_layout.png Binary files differindex efbbcda82..4d86966ba 100644 --- a/kcontrol/pics/cr16-app-keyboard_layout.png +++ b/kcontrol/pics/cr16-app-keyboard_layout.png diff --git a/kcontrol/pics/cr16-app-knotify.png b/kcontrol/pics/cr16-app-knotify.png Binary files differindex a893d6229..338f9b957 100644 --- a/kcontrol/pics/cr16-app-knotify.png +++ b/kcontrol/pics/cr16-app-knotify.png diff --git a/kcontrol/pics/cr16-app-kthememgr.png b/kcontrol/pics/cr16-app-kthememgr.png Binary files differindex 2b3588a05..91a4faae9 100644 --- a/kcontrol/pics/cr16-app-kthememgr.png +++ b/kcontrol/pics/cr16-app-kthememgr.png diff --git a/kcontrol/pics/cr16-app-locale.png b/kcontrol/pics/cr16-app-locale.png Binary files differindex 0dfece4d3..448a18e65 100644 --- a/kcontrol/pics/cr16-app-locale.png +++ b/kcontrol/pics/cr16-app-locale.png diff --git a/kcontrol/pics/cr16-app-multimedia.png b/kcontrol/pics/cr16-app-multimedia.png Binary files differindex d2bf93a19..91a2281ac 100644 --- a/kcontrol/pics/cr16-app-multimedia.png +++ b/kcontrol/pics/cr16-app-multimedia.png diff --git a/kcontrol/pics/cr16-app-panel_settings.png b/kcontrol/pics/cr16-app-panel_settings.png Binary files differindex e66dd216a..7df91bed1 100644 --- a/kcontrol/pics/cr16-app-panel_settings.png +++ b/kcontrol/pics/cr16-app-panel_settings.png diff --git a/kcontrol/pics/cr16-app-proxy.png b/kcontrol/pics/cr16-app-proxy.png Binary files differindex 69f8bb745..1ca125153 100644 --- a/kcontrol/pics/cr16-app-proxy.png +++ b/kcontrol/pics/cr16-app-proxy.png diff --git a/kcontrol/pics/cr16-app-samba.png b/kcontrol/pics/cr16-app-samba.png Binary files differindex 3d2e6885a..988591c5e 100644 --- a/kcontrol/pics/cr16-app-samba.png +++ b/kcontrol/pics/cr16-app-samba.png diff --git a/kcontrol/pics/cr16-app-style.png b/kcontrol/pics/cr16-app-style.png Binary files differindex b727f8f60..e56f46c3f 100644 --- a/kcontrol/pics/cr16-app-style.png +++ b/kcontrol/pics/cr16-app-style.png diff --git a/kcontrol/pics/cr16-app-stylesheet.png b/kcontrol/pics/cr16-app-stylesheet.png Binary files differindex 6fdea61e2..ce78d34a3 100644 --- a/kcontrol/pics/cr16-app-stylesheet.png +++ b/kcontrol/pics/cr16-app-stylesheet.png diff --git a/kcontrol/pics/cr16-app-tdescreensaver.png b/kcontrol/pics/cr16-app-tdescreensaver.png Binary files differindex 200fe3dcc..39c57ea46 100644 --- a/kcontrol/pics/cr16-app-tdescreensaver.png +++ b/kcontrol/pics/cr16-app-tdescreensaver.png diff --git a/kcontrol/pics/cr16-app-tdmconfig.png b/kcontrol/pics/cr16-app-tdmconfig.png Binary files differindex 8f69e2b99..8f94a3ffc 100644 --- a/kcontrol/pics/cr16-app-tdmconfig.png +++ b/kcontrol/pics/cr16-app-tdmconfig.png diff --git a/kcontrol/pics/cr16-app-usb.png b/kcontrol/pics/cr16-app-usb.png Binary files differindex b772ba541..b3b25f1fa 100644 --- a/kcontrol/pics/cr16-app-usb.png +++ b/kcontrol/pics/cr16-app-usb.png diff --git a/kcontrol/pics/cr16-category-preferences-desktop-peripherals.png b/kcontrol/pics/cr16-category-preferences-desktop-peripherals.png Binary files differindex 18b3f92eb..2646c7a18 100644 --- a/kcontrol/pics/cr16-category-preferences-desktop-peripherals.png +++ b/kcontrol/pics/cr16-category-preferences-desktop-peripherals.png diff --git a/kcontrol/pics/cr16-category-preferences-desktop-personal.png b/kcontrol/pics/cr16-category-preferences-desktop-personal.png Binary files differindex 83e5b318b..6a1402e08 100644 --- a/kcontrol/pics/cr16-category-preferences-desktop-personal.png +++ b/kcontrol/pics/cr16-category-preferences-desktop-personal.png diff --git a/kcontrol/pics/cr16-category-preferences-desktop.png b/kcontrol/pics/cr16-category-preferences-desktop.png Binary files differindex fb4181004..fd965f4b3 100644 --- a/kcontrol/pics/cr16-category-preferences-desktop.png +++ b/kcontrol/pics/cr16-category-preferences-desktop.png diff --git a/kcontrol/pics/cr16-category-preferences-system.png b/kcontrol/pics/cr16-category-preferences-system.png Binary files differindex b97bfb434..b41c29633 100644 --- a/kcontrol/pics/cr16-category-preferences-system.png +++ b/kcontrol/pics/cr16-category-preferences-system.png diff --git a/kcontrol/pics/cr16-device-laptop.png b/kcontrol/pics/cr16-device-laptop.png Binary files differindex 9e221e632..5d5c97795 100644 --- a/kcontrol/pics/cr16-device-laptop.png +++ b/kcontrol/pics/cr16-device-laptop.png diff --git a/kcontrol/pics/cr22-app-access.png b/kcontrol/pics/cr22-app-access.png Binary files differindex ba7027a14..e6c53f3e3 100644 --- a/kcontrol/pics/cr22-app-access.png +++ b/kcontrol/pics/cr22-app-access.png diff --git a/kcontrol/pics/cr22-app-arts.png b/kcontrol/pics/cr22-app-arts.png Binary files differindex 2a1a4ceb0..fc5d462a4 100644 --- a/kcontrol/pics/cr22-app-arts.png +++ b/kcontrol/pics/cr22-app-arts.png diff --git a/kcontrol/pics/cr22-app-background.png b/kcontrol/pics/cr22-app-background.png Binary files differindex 3f742a847..d4eaaaa89 100644 --- a/kcontrol/pics/cr22-app-background.png +++ b/kcontrol/pics/cr22-app-background.png diff --git a/kcontrol/pics/cr22-app-bell.png b/kcontrol/pics/cr22-app-bell.png Binary files differindex f4dd1afd5..2746eefd2 100644 --- a/kcontrol/pics/cr22-app-bell.png +++ b/kcontrol/pics/cr22-app-bell.png diff --git a/kcontrol/pics/cr22-app-cache.png b/kcontrol/pics/cr22-app-cache.png Binary files differindex 509009956..aaa56df55 100644 --- a/kcontrol/pics/cr22-app-cache.png +++ b/kcontrol/pics/cr22-app-cache.png diff --git a/kcontrol/pics/cr22-app-colors.png b/kcontrol/pics/cr22-app-colors.png Binary files differindex 84fb0b922..4d94f4ccf 100644 --- a/kcontrol/pics/cr22-app-colors.png +++ b/kcontrol/pics/cr22-app-colors.png diff --git a/kcontrol/pics/cr22-app-cookie.png b/kcontrol/pics/cr22-app-cookie.png Binary files differindex eb11b7605..c1ec40149 100644 --- a/kcontrol/pics/cr22-app-cookie.png +++ b/kcontrol/pics/cr22-app-cookie.png diff --git a/kcontrol/pics/cr22-app-date.png b/kcontrol/pics/cr22-app-date.png Binary files differindex cb1f8455a..b1638e7f6 100644 --- a/kcontrol/pics/cr22-app-date.png +++ b/kcontrol/pics/cr22-app-date.png diff --git a/kcontrol/pics/cr22-app-energy.png b/kcontrol/pics/cr22-app-energy.png Binary files differindex 2893c77bf..92b5d27cd 100644 --- a/kcontrol/pics/cr22-app-energy.png +++ b/kcontrol/pics/cr22-app-energy.png diff --git a/kcontrol/pics/cr22-app-enhanced_browsing.png b/kcontrol/pics/cr22-app-enhanced_browsing.png Binary files differindex c7281f352..3563acea7 100644 --- a/kcontrol/pics/cr22-app-enhanced_browsing.png +++ b/kcontrol/pics/cr22-app-enhanced_browsing.png diff --git a/kcontrol/pics/cr22-app-filetypes.png b/kcontrol/pics/cr22-app-filetypes.png Binary files differindex 71e4ae8a2..72b185590 100644 --- a/kcontrol/pics/cr22-app-filetypes.png +++ b/kcontrol/pics/cr22-app-filetypes.png diff --git a/kcontrol/pics/cr22-app-fonts.png b/kcontrol/pics/cr22-app-fonts.png Binary files differindex 19fccc6c5..247a04d15 100644 --- a/kcontrol/pics/cr22-app-fonts.png +++ b/kcontrol/pics/cr22-app-fonts.png diff --git a/kcontrol/pics/cr22-app-hwinfo.png b/kcontrol/pics/cr22-app-hwinfo.png Binary files differindex 9eb787ef2..95779f68e 100644 --- a/kcontrol/pics/cr22-app-hwinfo.png +++ b/kcontrol/pics/cr22-app-hwinfo.png diff --git a/kcontrol/pics/cr22-app-ieee1394.png b/kcontrol/pics/cr22-app-ieee1394.png Binary files differindex 184c283bf..e582ea87d 100644 --- a/kcontrol/pics/cr22-app-ieee1394.png +++ b/kcontrol/pics/cr22-app-ieee1394.png diff --git a/kcontrol/pics/cr22-app-kcmdevices.png b/kcontrol/pics/cr22-app-kcmdevices.png Binary files differindex 49d63884d..7fe37589a 100644 --- a/kcontrol/pics/cr22-app-kcmdevices.png +++ b/kcontrol/pics/cr22-app-kcmdevices.png diff --git a/kcontrol/pics/cr22-app-kcmkicker.png b/kcontrol/pics/cr22-app-kcmkicker.png Binary files differindex 0901b7460..dbfa1e548 100644 --- a/kcontrol/pics/cr22-app-kcmkicker.png +++ b/kcontrol/pics/cr22-app-kcmkicker.png diff --git a/kcontrol/pics/cr22-app-kcmkwm.png b/kcontrol/pics/cr22-app-kcmkwm.png Binary files differindex b6c17916a..cd0271118 100644 --- a/kcontrol/pics/cr22-app-kcmkwm.png +++ b/kcontrol/pics/cr22-app-kcmkwm.png diff --git a/kcontrol/pics/cr22-app-kcmx.png b/kcontrol/pics/cr22-app-kcmx.png Binary files differindex fdab29916..9e04133c4 100644 --- a/kcontrol/pics/cr22-app-kcmx.png +++ b/kcontrol/pics/cr22-app-kcmx.png diff --git a/kcontrol/pics/cr22-app-key_bindings.png b/kcontrol/pics/cr22-app-key_bindings.png Binary files differindex 732f4d9c1..a1caf143d 100644 --- a/kcontrol/pics/cr22-app-key_bindings.png +++ b/kcontrol/pics/cr22-app-key_bindings.png diff --git a/kcontrol/pics/cr22-app-keyboard.png b/kcontrol/pics/cr22-app-keyboard.png Binary files differindex 4360481af..e54f4b367 100644 --- a/kcontrol/pics/cr22-app-keyboard.png +++ b/kcontrol/pics/cr22-app-keyboard.png diff --git a/kcontrol/pics/cr22-app-locale.png b/kcontrol/pics/cr22-app-locale.png Binary files differindex 827360a8b..452769ee6 100644 --- a/kcontrol/pics/cr22-app-locale.png +++ b/kcontrol/pics/cr22-app-locale.png diff --git a/kcontrol/pics/cr22-app-proxy.png b/kcontrol/pics/cr22-app-proxy.png Binary files differindex e8fef4233..58ec7917b 100644 --- a/kcontrol/pics/cr22-app-proxy.png +++ b/kcontrol/pics/cr22-app-proxy.png diff --git a/kcontrol/pics/cr22-app-samba.png b/kcontrol/pics/cr22-app-samba.png Binary files differindex 32b5972e9..905e399c5 100644 --- a/kcontrol/pics/cr22-app-samba.png +++ b/kcontrol/pics/cr22-app-samba.png diff --git a/kcontrol/pics/cr22-app-stylesheet.png b/kcontrol/pics/cr22-app-stylesheet.png Binary files differindex 625688457..a0ed2772f 100644 --- a/kcontrol/pics/cr22-app-stylesheet.png +++ b/kcontrol/pics/cr22-app-stylesheet.png diff --git a/kcontrol/pics/cr22-app-tdescreensaver.png b/kcontrol/pics/cr22-app-tdescreensaver.png Binary files differindex 7448fe237..63a349a78 100644 --- a/kcontrol/pics/cr22-app-tdescreensaver.png +++ b/kcontrol/pics/cr22-app-tdescreensaver.png diff --git a/kcontrol/pics/cr22-app-tdmconfig.png b/kcontrol/pics/cr22-app-tdmconfig.png Binary files differindex 399978a99..00e42ac3e 100644 --- a/kcontrol/pics/cr22-app-tdmconfig.png +++ b/kcontrol/pics/cr22-app-tdmconfig.png diff --git a/kcontrol/pics/cr22-category-preferences-desktop-personal.png b/kcontrol/pics/cr22-category-preferences-desktop-personal.png Binary files differindex 6b7153767..d805d03e4 100644 --- a/kcontrol/pics/cr22-category-preferences-desktop-personal.png +++ b/kcontrol/pics/cr22-category-preferences-desktop-personal.png diff --git a/kcontrol/pics/cr22-device-laptop.png b/kcontrol/pics/cr22-device-laptop.png Binary files differindex db7f61e89..e6520ce99 100644 --- a/kcontrol/pics/cr22-device-laptop.png +++ b/kcontrol/pics/cr22-device-laptop.png diff --git a/kcontrol/pics/cr32-app-access.png b/kcontrol/pics/cr32-app-access.png Binary files differindex c83070ca3..3e60c4be5 100644 --- a/kcontrol/pics/cr32-app-access.png +++ b/kcontrol/pics/cr32-app-access.png diff --git a/kcontrol/pics/cr32-app-agent.png b/kcontrol/pics/cr32-app-agent.png Binary files differindex d10a80c61..1a832620a 100644 --- a/kcontrol/pics/cr32-app-agent.png +++ b/kcontrol/pics/cr32-app-agent.png diff --git a/kcontrol/pics/cr32-app-arts.png b/kcontrol/pics/cr32-app-arts.png Binary files differindex 378cce9a6..eba7e5477 100644 --- a/kcontrol/pics/cr32-app-arts.png +++ b/kcontrol/pics/cr32-app-arts.png diff --git a/kcontrol/pics/cr32-app-background.png b/kcontrol/pics/cr32-app-background.png Binary files differindex 564ef39e8..ffc5ffaff 100644 --- a/kcontrol/pics/cr32-app-background.png +++ b/kcontrol/pics/cr32-app-background.png diff --git a/kcontrol/pics/cr32-app-bell.png b/kcontrol/pics/cr32-app-bell.png Binary files differindex 8d4079b99..9bc561ee1 100644 --- a/kcontrol/pics/cr32-app-bell.png +++ b/kcontrol/pics/cr32-app-bell.png diff --git a/kcontrol/pics/cr32-app-cache.png b/kcontrol/pics/cr32-app-cache.png Binary files differindex 7700fd9ad..b051f00f3 100644 --- a/kcontrol/pics/cr32-app-cache.png +++ b/kcontrol/pics/cr32-app-cache.png diff --git a/kcontrol/pics/cr32-app-clock.png b/kcontrol/pics/cr32-app-clock.png Binary files differindex 0f93b36cc..d986ffde9 100644 --- a/kcontrol/pics/cr32-app-clock.png +++ b/kcontrol/pics/cr32-app-clock.png diff --git a/kcontrol/pics/cr32-app-colors.png b/kcontrol/pics/cr32-app-colors.png Binary files differindex e5aa87cbd..b7e33832f 100644 --- a/kcontrol/pics/cr32-app-colors.png +++ b/kcontrol/pics/cr32-app-colors.png diff --git a/kcontrol/pics/cr32-app-cookie.png b/kcontrol/pics/cr32-app-cookie.png Binary files differindex 0879588c8..d287673a3 100644 --- a/kcontrol/pics/cr32-app-cookie.png +++ b/kcontrol/pics/cr32-app-cookie.png diff --git a/kcontrol/pics/cr32-app-date.png b/kcontrol/pics/cr32-app-date.png Binary files differindex 54b320347..923d08476 100644 --- a/kcontrol/pics/cr32-app-date.png +++ b/kcontrol/pics/cr32-app-date.png diff --git a/kcontrol/pics/cr32-app-energy.png b/kcontrol/pics/cr32-app-energy.png Binary files differindex e796c0528..573b026c4 100644 --- a/kcontrol/pics/cr32-app-energy.png +++ b/kcontrol/pics/cr32-app-energy.png diff --git a/kcontrol/pics/cr32-app-energy_star.png b/kcontrol/pics/cr32-app-energy_star.png Binary files differindex c26cf4cee..d4209e127 100644 --- a/kcontrol/pics/cr32-app-energy_star.png +++ b/kcontrol/pics/cr32-app-energy_star.png diff --git a/kcontrol/pics/cr32-app-filetypes.png b/kcontrol/pics/cr32-app-filetypes.png Binary files differindex 53d0099be..4d80e91df 100644 --- a/kcontrol/pics/cr32-app-filetypes.png +++ b/kcontrol/pics/cr32-app-filetypes.png diff --git a/kcontrol/pics/cr32-app-fonts.png b/kcontrol/pics/cr32-app-fonts.png Binary files differindex 9ace98c25..e7f40711a 100644 --- a/kcontrol/pics/cr32-app-fonts.png +++ b/kcontrol/pics/cr32-app-fonts.png diff --git a/kcontrol/pics/cr32-app-help_index.png b/kcontrol/pics/cr32-app-help_index.png Binary files differindex d5af86353..8c30c52f8 100644 --- a/kcontrol/pics/cr32-app-help_index.png +++ b/kcontrol/pics/cr32-app-help_index.png diff --git a/kcontrol/pics/cr32-app-hwinfo.png b/kcontrol/pics/cr32-app-hwinfo.png Binary files differindex dfb9a1c14..f59fafd92 100644 --- a/kcontrol/pics/cr32-app-hwinfo.png +++ b/kcontrol/pics/cr32-app-hwinfo.png diff --git a/kcontrol/pics/cr32-app-icons.png b/kcontrol/pics/cr32-app-icons.png Binary files differindex a12f847d9..6b3d9d13d 100644 --- a/kcontrol/pics/cr32-app-icons.png +++ b/kcontrol/pics/cr32-app-icons.png diff --git a/kcontrol/pics/cr32-app-iconthemes.png b/kcontrol/pics/cr32-app-iconthemes.png Binary files differindex c5326752a..425265cd3 100644 --- a/kcontrol/pics/cr32-app-iconthemes.png +++ b/kcontrol/pics/cr32-app-iconthemes.png diff --git a/kcontrol/pics/cr32-app-ieee1394.png b/kcontrol/pics/cr32-app-ieee1394.png Binary files differindex 0253e7976..0767a6a65 100644 --- a/kcontrol/pics/cr32-app-ieee1394.png +++ b/kcontrol/pics/cr32-app-ieee1394.png diff --git a/kcontrol/pics/cr32-app-kcmdevices.png b/kcontrol/pics/cr32-app-kcmdevices.png Binary files differindex d6354ad28..cbca902a0 100644 --- a/kcontrol/pics/cr32-app-kcmdevices.png +++ b/kcontrol/pics/cr32-app-kcmdevices.png diff --git a/kcontrol/pics/cr32-app-kcmdrkonqi.png b/kcontrol/pics/cr32-app-kcmdrkonqi.png Binary files differindex 26bb684cb..41181190e 100644 --- a/kcontrol/pics/cr32-app-kcmdrkonqi.png +++ b/kcontrol/pics/cr32-app-kcmdrkonqi.png diff --git a/kcontrol/pics/cr32-app-kcmkicker.png b/kcontrol/pics/cr32-app-kcmkicker.png Binary files differindex e60d5a26e..12b478e37 100644 --- a/kcontrol/pics/cr32-app-kcmkicker.png +++ b/kcontrol/pics/cr32-app-kcmkicker.png diff --git a/kcontrol/pics/cr32-app-kcmkwm.png b/kcontrol/pics/cr32-app-kcmkwm.png Binary files differindex a44e89764..4d9fd6b87 100644 --- a/kcontrol/pics/cr32-app-kcmkwm.png +++ b/kcontrol/pics/cr32-app-kcmkwm.png diff --git a/kcontrol/pics/cr32-app-kcmmemory.png b/kcontrol/pics/cr32-app-kcmmemory.png Binary files differindex 8b50f37c9..cb09465bd 100644 --- a/kcontrol/pics/cr32-app-kcmmemory.png +++ b/kcontrol/pics/cr32-app-kcmmemory.png diff --git a/kcontrol/pics/cr32-app-kcmmidi.png b/kcontrol/pics/cr32-app-kcmmidi.png Binary files differindex 8430f26fb..c6c2c1a31 100644 --- a/kcontrol/pics/cr32-app-kcmmidi.png +++ b/kcontrol/pics/cr32-app-kcmmidi.png diff --git a/kcontrol/pics/cr32-app-kcmpartitions.png b/kcontrol/pics/cr32-app-kcmpartitions.png Binary files differindex e5a746f31..4a0dec4c8 100644 --- a/kcontrol/pics/cr32-app-kcmpartitions.png +++ b/kcontrol/pics/cr32-app-kcmpartitions.png diff --git a/kcontrol/pics/cr32-app-kcmpci.png b/kcontrol/pics/cr32-app-kcmpci.png Binary files differindex fbde5bd3f..0be06cdf9 100644 --- a/kcontrol/pics/cr32-app-kcmpci.png +++ b/kcontrol/pics/cr32-app-kcmpci.png diff --git a/kcontrol/pics/cr32-app-kcmprocessor.png b/kcontrol/pics/cr32-app-kcmprocessor.png Binary files differindex 72b2b4691..75633e212 100644 --- a/kcontrol/pics/cr32-app-kcmprocessor.png +++ b/kcontrol/pics/cr32-app-kcmprocessor.png diff --git a/kcontrol/pics/cr32-app-kcmscsi.png b/kcontrol/pics/cr32-app-kcmscsi.png Binary files differindex d09ff08a2..9fb204eb6 100644 --- a/kcontrol/pics/cr32-app-kcmscsi.png +++ b/kcontrol/pics/cr32-app-kcmscsi.png diff --git a/kcontrol/pics/cr32-app-kcmsound.png b/kcontrol/pics/cr32-app-kcmsound.png Binary files differindex c122c880b..187025d0f 100644 --- a/kcontrol/pics/cr32-app-kcmsound.png +++ b/kcontrol/pics/cr32-app-kcmsound.png diff --git a/kcontrol/pics/cr32-app-kcmx.png b/kcontrol/pics/cr32-app-kcmx.png Binary files differindex 4157c391d..da9f7e1ad 100644 --- a/kcontrol/pics/cr32-app-kcmx.png +++ b/kcontrol/pics/cr32-app-kcmx.png diff --git a/kcontrol/pics/cr32-app-key_bindings.png b/kcontrol/pics/cr32-app-key_bindings.png Binary files differindex 6a3438d92..069c86cf8 100644 --- a/kcontrol/pics/cr32-app-key_bindings.png +++ b/kcontrol/pics/cr32-app-key_bindings.png diff --git a/kcontrol/pics/cr32-app-keyboard.png b/kcontrol/pics/cr32-app-keyboard.png Binary files differindex 3bbc80536..5a457e478 100644 --- a/kcontrol/pics/cr32-app-keyboard.png +++ b/kcontrol/pics/cr32-app-keyboard.png diff --git a/kcontrol/pics/cr32-app-keyboard_layout.png b/kcontrol/pics/cr32-app-keyboard_layout.png Binary files differindex 672c59310..d555a4b96 100644 --- a/kcontrol/pics/cr32-app-keyboard_layout.png +++ b/kcontrol/pics/cr32-app-keyboard_layout.png diff --git a/kcontrol/pics/cr32-app-knotify.png b/kcontrol/pics/cr32-app-knotify.png Binary files differindex ede0d8ed1..b9b1b46e5 100644 --- a/kcontrol/pics/cr32-app-knotify.png +++ b/kcontrol/pics/cr32-app-knotify.png diff --git a/kcontrol/pics/cr32-app-kthememgr.png b/kcontrol/pics/cr32-app-kthememgr.png Binary files differindex 2bf6a7782..114c0550f 100644 --- a/kcontrol/pics/cr32-app-kthememgr.png +++ b/kcontrol/pics/cr32-app-kthememgr.png diff --git a/kcontrol/pics/cr32-app-locale.png b/kcontrol/pics/cr32-app-locale.png Binary files differindex 96b4201ac..ae4433053 100644 --- a/kcontrol/pics/cr32-app-locale.png +++ b/kcontrol/pics/cr32-app-locale.png diff --git a/kcontrol/pics/cr32-app-multimedia.png b/kcontrol/pics/cr32-app-multimedia.png Binary files differindex 1e397c524..bfbd4ea52 100644 --- a/kcontrol/pics/cr32-app-multimedia.png +++ b/kcontrol/pics/cr32-app-multimedia.png diff --git a/kcontrol/pics/cr32-app-proxy.png b/kcontrol/pics/cr32-app-proxy.png Binary files differindex 46f68b243..e3d90ab76 100644 --- a/kcontrol/pics/cr32-app-proxy.png +++ b/kcontrol/pics/cr32-app-proxy.png diff --git a/kcontrol/pics/cr32-app-samba.png b/kcontrol/pics/cr32-app-samba.png Binary files differindex 0d79e5c83..03dd90797 100644 --- a/kcontrol/pics/cr32-app-samba.png +++ b/kcontrol/pics/cr32-app-samba.png diff --git a/kcontrol/pics/cr32-app-style.png b/kcontrol/pics/cr32-app-style.png Binary files differindex 2e29a93a0..a4eed07e0 100644 --- a/kcontrol/pics/cr32-app-style.png +++ b/kcontrol/pics/cr32-app-style.png diff --git a/kcontrol/pics/cr32-app-stylesheet.png b/kcontrol/pics/cr32-app-stylesheet.png Binary files differindex ab8918c30..3af0d2bef 100644 --- a/kcontrol/pics/cr32-app-stylesheet.png +++ b/kcontrol/pics/cr32-app-stylesheet.png diff --git a/kcontrol/pics/cr32-app-tdescreensaver.png b/kcontrol/pics/cr32-app-tdescreensaver.png Binary files differindex f527126bc..4c84e5da1 100644 --- a/kcontrol/pics/cr32-app-tdescreensaver.png +++ b/kcontrol/pics/cr32-app-tdescreensaver.png diff --git a/kcontrol/pics/cr32-app-tdmconfig.png b/kcontrol/pics/cr32-app-tdmconfig.png Binary files differindex a5cbf22d3..49b30dce6 100644 --- a/kcontrol/pics/cr32-app-tdmconfig.png +++ b/kcontrol/pics/cr32-app-tdmconfig.png diff --git a/kcontrol/pics/cr32-app-usb.png b/kcontrol/pics/cr32-app-usb.png Binary files differindex c7601cb87..e986b5c4b 100644 --- a/kcontrol/pics/cr32-app-usb.png +++ b/kcontrol/pics/cr32-app-usb.png diff --git a/kcontrol/pics/cr32-category-preferences-desktop-peripherals.png b/kcontrol/pics/cr32-category-preferences-desktop-peripherals.png Binary files differindex 785b8a0fc..3dda90fc9 100644 --- a/kcontrol/pics/cr32-category-preferences-desktop-peripherals.png +++ b/kcontrol/pics/cr32-category-preferences-desktop-peripherals.png diff --git a/kcontrol/pics/cr32-category-preferences-desktop-personal.png b/kcontrol/pics/cr32-category-preferences-desktop-personal.png Binary files differindex 4f1959142..cc5e97aa5 100644 --- a/kcontrol/pics/cr32-category-preferences-desktop-personal.png +++ b/kcontrol/pics/cr32-category-preferences-desktop-personal.png diff --git a/kcontrol/pics/cr32-category-preferences-desktop.png b/kcontrol/pics/cr32-category-preferences-desktop.png Binary files differindex 75e29219b..c125c441b 100644 --- a/kcontrol/pics/cr32-category-preferences-desktop.png +++ b/kcontrol/pics/cr32-category-preferences-desktop.png diff --git a/kcontrol/pics/cr32-category-preferences-system.png b/kcontrol/pics/cr32-category-preferences-system.png Binary files differindex 726784a4d..80c7fced5 100644 --- a/kcontrol/pics/cr32-category-preferences-system.png +++ b/kcontrol/pics/cr32-category-preferences-system.png diff --git a/kcontrol/pics/cr32-device-laptop.png b/kcontrol/pics/cr32-device-laptop.png Binary files differindex 866f3aae1..adf30f5e0 100644 --- a/kcontrol/pics/cr32-device-laptop.png +++ b/kcontrol/pics/cr32-device-laptop.png diff --git a/kcontrol/pics/cr48-app-access.png b/kcontrol/pics/cr48-app-access.png Binary files differindex c74f3d99f..95d221e44 100644 --- a/kcontrol/pics/cr48-app-access.png +++ b/kcontrol/pics/cr48-app-access.png diff --git a/kcontrol/pics/cr48-app-agent.png b/kcontrol/pics/cr48-app-agent.png Binary files differindex 50864ebc1..09b9daeb2 100644 --- a/kcontrol/pics/cr48-app-agent.png +++ b/kcontrol/pics/cr48-app-agent.png diff --git a/kcontrol/pics/cr48-app-arts.png b/kcontrol/pics/cr48-app-arts.png Binary files differindex 462eff9a2..5066c0297 100644 --- a/kcontrol/pics/cr48-app-arts.png +++ b/kcontrol/pics/cr48-app-arts.png diff --git a/kcontrol/pics/cr48-app-background.png b/kcontrol/pics/cr48-app-background.png Binary files differindex c2328e70b..631905b93 100644 --- a/kcontrol/pics/cr48-app-background.png +++ b/kcontrol/pics/cr48-app-background.png diff --git a/kcontrol/pics/cr48-app-bell.png b/kcontrol/pics/cr48-app-bell.png Binary files differindex 0c4b6c5e3..c7ab7feb7 100644 --- a/kcontrol/pics/cr48-app-bell.png +++ b/kcontrol/pics/cr48-app-bell.png diff --git a/kcontrol/pics/cr48-app-cache.png b/kcontrol/pics/cr48-app-cache.png Binary files differindex df779f4b3..613ca1c92 100644 --- a/kcontrol/pics/cr48-app-cache.png +++ b/kcontrol/pics/cr48-app-cache.png diff --git a/kcontrol/pics/cr48-app-clock.png b/kcontrol/pics/cr48-app-clock.png Binary files differindex b97479759..b879f928b 100644 --- a/kcontrol/pics/cr48-app-clock.png +++ b/kcontrol/pics/cr48-app-clock.png diff --git a/kcontrol/pics/cr48-app-colors.png b/kcontrol/pics/cr48-app-colors.png Binary files differindex 4be4e3501..e076381e0 100644 --- a/kcontrol/pics/cr48-app-colors.png +++ b/kcontrol/pics/cr48-app-colors.png diff --git a/kcontrol/pics/cr48-app-cookie.png b/kcontrol/pics/cr48-app-cookie.png Binary files differindex b3dc63ebc..a43cffd64 100644 --- a/kcontrol/pics/cr48-app-cookie.png +++ b/kcontrol/pics/cr48-app-cookie.png diff --git a/kcontrol/pics/cr48-app-date.png b/kcontrol/pics/cr48-app-date.png Binary files differindex a510951db..e0ce62cd9 100644 --- a/kcontrol/pics/cr48-app-date.png +++ b/kcontrol/pics/cr48-app-date.png diff --git a/kcontrol/pics/cr48-app-energy.png b/kcontrol/pics/cr48-app-energy.png Binary files differindex 269eb4435..b66182b74 100644 --- a/kcontrol/pics/cr48-app-energy.png +++ b/kcontrol/pics/cr48-app-energy.png diff --git a/kcontrol/pics/cr48-app-energy_star.png b/kcontrol/pics/cr48-app-energy_star.png Binary files differindex 5ed89d5ae..53da9fdc5 100644 --- a/kcontrol/pics/cr48-app-energy_star.png +++ b/kcontrol/pics/cr48-app-energy_star.png diff --git a/kcontrol/pics/cr48-app-filetypes.png b/kcontrol/pics/cr48-app-filetypes.png Binary files differindex 37f365e21..ca2cfda20 100644 --- a/kcontrol/pics/cr48-app-filetypes.png +++ b/kcontrol/pics/cr48-app-filetypes.png diff --git a/kcontrol/pics/cr48-app-fonts.png b/kcontrol/pics/cr48-app-fonts.png Binary files differindex a17a1f282..a51c707db 100644 --- a/kcontrol/pics/cr48-app-fonts.png +++ b/kcontrol/pics/cr48-app-fonts.png diff --git a/kcontrol/pics/cr48-app-help_index.png b/kcontrol/pics/cr48-app-help_index.png Binary files differindex 418e1daf8..07c01d003 100644 --- a/kcontrol/pics/cr48-app-help_index.png +++ b/kcontrol/pics/cr48-app-help_index.png diff --git a/kcontrol/pics/cr48-app-hwinfo.png b/kcontrol/pics/cr48-app-hwinfo.png Binary files differindex a7f8b281e..6db94cebe 100644 --- a/kcontrol/pics/cr48-app-hwinfo.png +++ b/kcontrol/pics/cr48-app-hwinfo.png diff --git a/kcontrol/pics/cr48-app-icons.png b/kcontrol/pics/cr48-app-icons.png Binary files differindex a9100e732..aeda713c8 100644 --- a/kcontrol/pics/cr48-app-icons.png +++ b/kcontrol/pics/cr48-app-icons.png diff --git a/kcontrol/pics/cr48-app-iconthemes.png b/kcontrol/pics/cr48-app-iconthemes.png Binary files differindex 3ae2864a2..4b0f8d57d 100644 --- a/kcontrol/pics/cr48-app-iconthemes.png +++ b/kcontrol/pics/cr48-app-iconthemes.png diff --git a/kcontrol/pics/cr48-app-ieee1394.png b/kcontrol/pics/cr48-app-ieee1394.png Binary files differindex e5dd54b89..6ace14e07 100644 --- a/kcontrol/pics/cr48-app-ieee1394.png +++ b/kcontrol/pics/cr48-app-ieee1394.png diff --git a/kcontrol/pics/cr48-app-kcmdevices.png b/kcontrol/pics/cr48-app-kcmdevices.png Binary files differindex 59f5d185a..ac9f8bdc8 100644 --- a/kcontrol/pics/cr48-app-kcmdevices.png +++ b/kcontrol/pics/cr48-app-kcmdevices.png diff --git a/kcontrol/pics/cr48-app-kcmdf.png b/kcontrol/pics/cr48-app-kcmdf.png Binary files differindex 29d351f8b..93323214a 100644 --- a/kcontrol/pics/cr48-app-kcmdf.png +++ b/kcontrol/pics/cr48-app-kcmdf.png diff --git a/kcontrol/pics/cr48-app-kcmdrkonqi.png b/kcontrol/pics/cr48-app-kcmdrkonqi.png Binary files differindex 54d7ce45f..86830c95a 100644 --- a/kcontrol/pics/cr48-app-kcmdrkonqi.png +++ b/kcontrol/pics/cr48-app-kcmdrkonqi.png diff --git a/kcontrol/pics/cr48-app-kcmkicker.png b/kcontrol/pics/cr48-app-kcmkicker.png Binary files differindex dc7aee7dd..90fae4e96 100644 --- a/kcontrol/pics/cr48-app-kcmkicker.png +++ b/kcontrol/pics/cr48-app-kcmkicker.png diff --git a/kcontrol/pics/cr48-app-kcmkwm.png b/kcontrol/pics/cr48-app-kcmkwm.png Binary files differindex aba583bed..b4b30269e 100644 --- a/kcontrol/pics/cr48-app-kcmkwm.png +++ b/kcontrol/pics/cr48-app-kcmkwm.png diff --git a/kcontrol/pics/cr48-app-kcmmemory.png b/kcontrol/pics/cr48-app-kcmmemory.png Binary files differindex 3424cfa33..b64d11d6a 100644 --- a/kcontrol/pics/cr48-app-kcmmemory.png +++ b/kcontrol/pics/cr48-app-kcmmemory.png diff --git a/kcontrol/pics/cr48-app-kcmmidi.png b/kcontrol/pics/cr48-app-kcmmidi.png Binary files differindex 8d716aca4..b27a1bcf1 100644 --- a/kcontrol/pics/cr48-app-kcmmidi.png +++ b/kcontrol/pics/cr48-app-kcmmidi.png diff --git a/kcontrol/pics/cr48-app-kcmopengl.png b/kcontrol/pics/cr48-app-kcmopengl.png Binary files differindex ae934924c..d21a43011 100644 --- a/kcontrol/pics/cr48-app-kcmopengl.png +++ b/kcontrol/pics/cr48-app-kcmopengl.png diff --git a/kcontrol/pics/cr48-app-kcmpartitions.png b/kcontrol/pics/cr48-app-kcmpartitions.png Binary files differindex bddfa43e8..a820a3046 100644 --- a/kcontrol/pics/cr48-app-kcmpartitions.png +++ b/kcontrol/pics/cr48-app-kcmpartitions.png diff --git a/kcontrol/pics/cr48-app-kcmpci.png b/kcontrol/pics/cr48-app-kcmpci.png Binary files differindex 51215dddf..1a79dcbaf 100644 --- a/kcontrol/pics/cr48-app-kcmpci.png +++ b/kcontrol/pics/cr48-app-kcmpci.png diff --git a/kcontrol/pics/cr48-app-kcmprocessor.png b/kcontrol/pics/cr48-app-kcmprocessor.png Binary files differindex 34e98e2f9..61253cf06 100644 --- a/kcontrol/pics/cr48-app-kcmprocessor.png +++ b/kcontrol/pics/cr48-app-kcmprocessor.png diff --git a/kcontrol/pics/cr48-app-kcmscsi.png b/kcontrol/pics/cr48-app-kcmscsi.png Binary files differindex d2abcebcf..ce003921c 100644 --- a/kcontrol/pics/cr48-app-kcmscsi.png +++ b/kcontrol/pics/cr48-app-kcmscsi.png diff --git a/kcontrol/pics/cr48-app-kcmx.png b/kcontrol/pics/cr48-app-kcmx.png Binary files differindex 99a635905..9facd5af7 100644 --- a/kcontrol/pics/cr48-app-kcmx.png +++ b/kcontrol/pics/cr48-app-kcmx.png diff --git a/kcontrol/pics/cr48-app-key_bindings.png b/kcontrol/pics/cr48-app-key_bindings.png Binary files differindex e4134ce3e..57692bada 100644 --- a/kcontrol/pics/cr48-app-key_bindings.png +++ b/kcontrol/pics/cr48-app-key_bindings.png diff --git a/kcontrol/pics/cr48-app-keyboard.png b/kcontrol/pics/cr48-app-keyboard.png Binary files differindex 04c821147..596c583c4 100644 --- a/kcontrol/pics/cr48-app-keyboard.png +++ b/kcontrol/pics/cr48-app-keyboard.png diff --git a/kcontrol/pics/cr48-app-keyboard_layout.png b/kcontrol/pics/cr48-app-keyboard_layout.png Binary files differindex ba0359447..ea20a16bc 100644 --- a/kcontrol/pics/cr48-app-keyboard_layout.png +++ b/kcontrol/pics/cr48-app-keyboard_layout.png diff --git a/kcontrol/pics/cr48-app-kicker.png b/kcontrol/pics/cr48-app-kicker.png Binary files differindex dc7aee7dd..90fae4e96 100644 --- a/kcontrol/pics/cr48-app-kicker.png +++ b/kcontrol/pics/cr48-app-kicker.png diff --git a/kcontrol/pics/cr48-app-knotify.png b/kcontrol/pics/cr48-app-knotify.png Binary files differindex b0aa6e8fa..6d3b598c7 100644 --- a/kcontrol/pics/cr48-app-knotify.png +++ b/kcontrol/pics/cr48-app-knotify.png diff --git a/kcontrol/pics/cr48-app-kthememgr.png b/kcontrol/pics/cr48-app-kthememgr.png Binary files differindex 50430c726..883dd353b 100644 --- a/kcontrol/pics/cr48-app-kthememgr.png +++ b/kcontrol/pics/cr48-app-kthememgr.png diff --git a/kcontrol/pics/cr48-app-locale.png b/kcontrol/pics/cr48-app-locale.png Binary files differindex e7defacbc..b05844c53 100644 --- a/kcontrol/pics/cr48-app-locale.png +++ b/kcontrol/pics/cr48-app-locale.png diff --git a/kcontrol/pics/cr48-app-multimedia.png b/kcontrol/pics/cr48-app-multimedia.png Binary files differindex dc766a89c..0ef1022f2 100644 --- a/kcontrol/pics/cr48-app-multimedia.png +++ b/kcontrol/pics/cr48-app-multimedia.png diff --git a/kcontrol/pics/cr48-app-proxy.png b/kcontrol/pics/cr48-app-proxy.png Binary files differindex 3683e298c..1317ff9ac 100644 --- a/kcontrol/pics/cr48-app-proxy.png +++ b/kcontrol/pics/cr48-app-proxy.png diff --git a/kcontrol/pics/cr48-app-samba.png b/kcontrol/pics/cr48-app-samba.png Binary files differindex d980263d8..534580c38 100644 --- a/kcontrol/pics/cr48-app-samba.png +++ b/kcontrol/pics/cr48-app-samba.png diff --git a/kcontrol/pics/cr48-app-style.png b/kcontrol/pics/cr48-app-style.png Binary files differindex 5d8af7e87..239281324 100644 --- a/kcontrol/pics/cr48-app-style.png +++ b/kcontrol/pics/cr48-app-style.png diff --git a/kcontrol/pics/cr48-app-stylesheet.png b/kcontrol/pics/cr48-app-stylesheet.png Binary files differindex f74586b3c..cbe7bc267 100644 --- a/kcontrol/pics/cr48-app-stylesheet.png +++ b/kcontrol/pics/cr48-app-stylesheet.png diff --git a/kcontrol/pics/cr48-app-tdescreensaver.png b/kcontrol/pics/cr48-app-tdescreensaver.png Binary files differindex 749f42253..290b72ae9 100644 --- a/kcontrol/pics/cr48-app-tdescreensaver.png +++ b/kcontrol/pics/cr48-app-tdescreensaver.png diff --git a/kcontrol/pics/cr48-app-tdmconfig.png b/kcontrol/pics/cr48-app-tdmconfig.png Binary files differindex d8b241ca9..dd419933e 100644 --- a/kcontrol/pics/cr48-app-tdmconfig.png +++ b/kcontrol/pics/cr48-app-tdmconfig.png diff --git a/kcontrol/pics/cr48-app-usb.png b/kcontrol/pics/cr48-app-usb.png Binary files differindex 4260b8259..a756a911a 100644 --- a/kcontrol/pics/cr48-app-usb.png +++ b/kcontrol/pics/cr48-app-usb.png diff --git a/kcontrol/pics/cr48-category-preferences-desktop-peripherals.png b/kcontrol/pics/cr48-category-preferences-desktop-peripherals.png Binary files differindex 5c1e16a5b..c6bbe3173 100644 --- a/kcontrol/pics/cr48-category-preferences-desktop-peripherals.png +++ b/kcontrol/pics/cr48-category-preferences-desktop-peripherals.png diff --git a/kcontrol/pics/cr48-category-preferences-desktop-personal.png b/kcontrol/pics/cr48-category-preferences-desktop-personal.png Binary files differindex 90aedf0f8..433db418a 100644 --- a/kcontrol/pics/cr48-category-preferences-desktop-personal.png +++ b/kcontrol/pics/cr48-category-preferences-desktop-personal.png diff --git a/kcontrol/pics/cr48-category-preferences-desktop.png b/kcontrol/pics/cr48-category-preferences-desktop.png Binary files differindex 342ebd7af..b8b4a3a48 100644 --- a/kcontrol/pics/cr48-category-preferences-desktop.png +++ b/kcontrol/pics/cr48-category-preferences-desktop.png diff --git a/kcontrol/pics/cr48-category-preferences-system.png b/kcontrol/pics/cr48-category-preferences-system.png Binary files differindex 3ed096d9d..dac0b12da 100644 --- a/kcontrol/pics/cr48-category-preferences-system.png +++ b/kcontrol/pics/cr48-category-preferences-system.png diff --git a/kcontrol/pics/cr48-device-laptop.png b/kcontrol/pics/cr48-device-laptop.png Binary files differindex 380f8ba0b..8f3546ad2 100644 --- a/kcontrol/pics/cr48-device-laptop.png +++ b/kcontrol/pics/cr48-device-laptop.png diff --git a/kcontrol/pics/cr64-app-access.png b/kcontrol/pics/cr64-app-access.png Binary files differindex 1d932d01d..9a762241a 100644 --- a/kcontrol/pics/cr64-app-access.png +++ b/kcontrol/pics/cr64-app-access.png diff --git a/kcontrol/pics/cr64-app-arts.png b/kcontrol/pics/cr64-app-arts.png Binary files differindex cab3cd94a..b1fb880b8 100644 --- a/kcontrol/pics/cr64-app-arts.png +++ b/kcontrol/pics/cr64-app-arts.png diff --git a/kcontrol/pics/cr64-app-background.png b/kcontrol/pics/cr64-app-background.png Binary files differindex 0f9de6c17..50706c290 100644 --- a/kcontrol/pics/cr64-app-background.png +++ b/kcontrol/pics/cr64-app-background.png diff --git a/kcontrol/pics/cr64-app-bell.png b/kcontrol/pics/cr64-app-bell.png Binary files differindex f83c4092e..c8993cef5 100644 --- a/kcontrol/pics/cr64-app-bell.png +++ b/kcontrol/pics/cr64-app-bell.png diff --git a/kcontrol/pics/cr64-app-cache.png b/kcontrol/pics/cr64-app-cache.png Binary files differindex a49b55d1d..6ddf0e0fd 100644 --- a/kcontrol/pics/cr64-app-cache.png +++ b/kcontrol/pics/cr64-app-cache.png diff --git a/kcontrol/pics/cr64-app-clock.png b/kcontrol/pics/cr64-app-clock.png Binary files differindex 5698b5e05..e32c65cbf 100644 --- a/kcontrol/pics/cr64-app-clock.png +++ b/kcontrol/pics/cr64-app-clock.png diff --git a/kcontrol/pics/cr64-app-colors.png b/kcontrol/pics/cr64-app-colors.png Binary files differindex bf01037f5..40fcfaff5 100644 --- a/kcontrol/pics/cr64-app-colors.png +++ b/kcontrol/pics/cr64-app-colors.png diff --git a/kcontrol/pics/cr64-app-cookie.png b/kcontrol/pics/cr64-app-cookie.png Binary files differindex 3988e0f23..8460269e7 100644 --- a/kcontrol/pics/cr64-app-cookie.png +++ b/kcontrol/pics/cr64-app-cookie.png diff --git a/kcontrol/pics/cr64-app-date.png b/kcontrol/pics/cr64-app-date.png Binary files differindex 06761d77e..3b46e6a7c 100644 --- a/kcontrol/pics/cr64-app-date.png +++ b/kcontrol/pics/cr64-app-date.png diff --git a/kcontrol/pics/cr64-app-energy.png b/kcontrol/pics/cr64-app-energy.png Binary files differindex 5223681ff..c233a51a9 100644 --- a/kcontrol/pics/cr64-app-energy.png +++ b/kcontrol/pics/cr64-app-energy.png diff --git a/kcontrol/pics/cr64-app-energy_star.png b/kcontrol/pics/cr64-app-energy_star.png Binary files differindex 13a4640ab..23756779d 100644 --- a/kcontrol/pics/cr64-app-energy_star.png +++ b/kcontrol/pics/cr64-app-energy_star.png diff --git a/kcontrol/pics/cr64-app-filetypes.png b/kcontrol/pics/cr64-app-filetypes.png Binary files differindex 6f723a9cc..5dc7ef613 100644 --- a/kcontrol/pics/cr64-app-filetypes.png +++ b/kcontrol/pics/cr64-app-filetypes.png diff --git a/kcontrol/pics/cr64-app-fonts.png b/kcontrol/pics/cr64-app-fonts.png Binary files differindex 6fdab333d..6808d43f0 100644 --- a/kcontrol/pics/cr64-app-fonts.png +++ b/kcontrol/pics/cr64-app-fonts.png diff --git a/kcontrol/pics/cr64-app-help_index.png b/kcontrol/pics/cr64-app-help_index.png Binary files differindex 56be1b7b0..2a48aa8fd 100644 --- a/kcontrol/pics/cr64-app-help_index.png +++ b/kcontrol/pics/cr64-app-help_index.png diff --git a/kcontrol/pics/cr64-app-hwinfo.png b/kcontrol/pics/cr64-app-hwinfo.png Binary files differindex bb3ac3019..100fa367f 100644 --- a/kcontrol/pics/cr64-app-hwinfo.png +++ b/kcontrol/pics/cr64-app-hwinfo.png diff --git a/kcontrol/pics/cr64-app-icons.png b/kcontrol/pics/cr64-app-icons.png Binary files differindex 3891bc74d..0635b6b87 100644 --- a/kcontrol/pics/cr64-app-icons.png +++ b/kcontrol/pics/cr64-app-icons.png diff --git a/kcontrol/pics/cr64-app-ieee1394.png b/kcontrol/pics/cr64-app-ieee1394.png Binary files differindex eb8d540b2..a9fc990c8 100644 --- a/kcontrol/pics/cr64-app-ieee1394.png +++ b/kcontrol/pics/cr64-app-ieee1394.png diff --git a/kcontrol/pics/cr64-app-kcmdevices.png b/kcontrol/pics/cr64-app-kcmdevices.png Binary files differindex 396b3d3ba..461628285 100644 --- a/kcontrol/pics/cr64-app-kcmdevices.png +++ b/kcontrol/pics/cr64-app-kcmdevices.png diff --git a/kcontrol/pics/cr64-app-kcmdf.png b/kcontrol/pics/cr64-app-kcmdf.png Binary files differindex 58378b148..78aea3b32 100644 --- a/kcontrol/pics/cr64-app-kcmdf.png +++ b/kcontrol/pics/cr64-app-kcmdf.png diff --git a/kcontrol/pics/cr64-app-kcmkwm.png b/kcontrol/pics/cr64-app-kcmkwm.png Binary files differindex d453cd2cb..982afdb16 100644 --- a/kcontrol/pics/cr64-app-kcmkwm.png +++ b/kcontrol/pics/cr64-app-kcmkwm.png diff --git a/kcontrol/pics/cr64-app-kcmmemory.png b/kcontrol/pics/cr64-app-kcmmemory.png Binary files differindex 61f7cc517..c56f138b0 100644 --- a/kcontrol/pics/cr64-app-kcmmemory.png +++ b/kcontrol/pics/cr64-app-kcmmemory.png diff --git a/kcontrol/pics/cr64-app-kcmpartitions.png b/kcontrol/pics/cr64-app-kcmpartitions.png Binary files differindex 1bcce6d00..42ca2f9f1 100644 --- a/kcontrol/pics/cr64-app-kcmpartitions.png +++ b/kcontrol/pics/cr64-app-kcmpartitions.png diff --git a/kcontrol/pics/cr64-app-kcmpci.png b/kcontrol/pics/cr64-app-kcmpci.png Binary files differindex 6fae64367..262326d25 100644 --- a/kcontrol/pics/cr64-app-kcmpci.png +++ b/kcontrol/pics/cr64-app-kcmpci.png diff --git a/kcontrol/pics/cr64-app-kcmx.png b/kcontrol/pics/cr64-app-kcmx.png Binary files differindex 64e33b953..e7b91bdd8 100644 --- a/kcontrol/pics/cr64-app-kcmx.png +++ b/kcontrol/pics/cr64-app-kcmx.png diff --git a/kcontrol/pics/cr64-app-key_bindings.png b/kcontrol/pics/cr64-app-key_bindings.png Binary files differindex ca5090329..e549f0e53 100644 --- a/kcontrol/pics/cr64-app-key_bindings.png +++ b/kcontrol/pics/cr64-app-key_bindings.png diff --git a/kcontrol/pics/cr64-app-knotify.png b/kcontrol/pics/cr64-app-knotify.png Binary files differindex 3a4d918ae..7036262ee 100644 --- a/kcontrol/pics/cr64-app-knotify.png +++ b/kcontrol/pics/cr64-app-knotify.png diff --git a/kcontrol/pics/cr64-app-kthememgr.png b/kcontrol/pics/cr64-app-kthememgr.png Binary files differindex 784b5aef3..201af4fc4 100644 --- a/kcontrol/pics/cr64-app-kthememgr.png +++ b/kcontrol/pics/cr64-app-kthememgr.png diff --git a/kcontrol/pics/cr64-app-locale.png b/kcontrol/pics/cr64-app-locale.png Binary files differindex 042c0d345..b88c1aa9c 100644 --- a/kcontrol/pics/cr64-app-locale.png +++ b/kcontrol/pics/cr64-app-locale.png diff --git a/kcontrol/pics/cr64-app-multimedia.png b/kcontrol/pics/cr64-app-multimedia.png Binary files differindex 406aad0f1..e4de0d7f7 100644 --- a/kcontrol/pics/cr64-app-multimedia.png +++ b/kcontrol/pics/cr64-app-multimedia.png diff --git a/kcontrol/pics/cr64-app-proxy.png b/kcontrol/pics/cr64-app-proxy.png Binary files differindex 9b5f5b6a8..b77a185c2 100644 --- a/kcontrol/pics/cr64-app-proxy.png +++ b/kcontrol/pics/cr64-app-proxy.png diff --git a/kcontrol/pics/cr64-app-samba.png b/kcontrol/pics/cr64-app-samba.png Binary files differindex 2bade600c..25807367d 100644 --- a/kcontrol/pics/cr64-app-samba.png +++ b/kcontrol/pics/cr64-app-samba.png diff --git a/kcontrol/pics/cr64-app-style.png b/kcontrol/pics/cr64-app-style.png Binary files differindex d3f70b0cb..6cf7cde02 100644 --- a/kcontrol/pics/cr64-app-style.png +++ b/kcontrol/pics/cr64-app-style.png diff --git a/kcontrol/pics/cr64-app-stylesheet.png b/kcontrol/pics/cr64-app-stylesheet.png Binary files differindex ac393bc3e..877009d54 100644 --- a/kcontrol/pics/cr64-app-stylesheet.png +++ b/kcontrol/pics/cr64-app-stylesheet.png diff --git a/kcontrol/pics/cr64-app-tdescreensaver.png b/kcontrol/pics/cr64-app-tdescreensaver.png Binary files differindex 69c8214fb..54a8fc847 100644 --- a/kcontrol/pics/cr64-app-tdescreensaver.png +++ b/kcontrol/pics/cr64-app-tdescreensaver.png diff --git a/kcontrol/pics/cr64-app-tdmconfig.png b/kcontrol/pics/cr64-app-tdmconfig.png Binary files differindex 57c5726d0..b48d949f6 100644 --- a/kcontrol/pics/cr64-app-tdmconfig.png +++ b/kcontrol/pics/cr64-app-tdmconfig.png diff --git a/kcontrol/pics/cr64-category-preferences-desktop-personal.png b/kcontrol/pics/cr64-category-preferences-desktop-personal.png Binary files differindex 136dcfe11..1f0a10af6 100644 --- a/kcontrol/pics/cr64-category-preferences-desktop-personal.png +++ b/kcontrol/pics/cr64-category-preferences-desktop-personal.png diff --git a/kcontrol/pics/cr64-category-preferences-desktop.png b/kcontrol/pics/cr64-category-preferences-desktop.png Binary files differindex b73346e44..51c28feaf 100644 --- a/kcontrol/pics/cr64-category-preferences-desktop.png +++ b/kcontrol/pics/cr64-category-preferences-desktop.png diff --git a/kcontrol/pics/cr64-device-laptop.png b/kcontrol/pics/cr64-device-laptop.png Binary files differindex 6084660cc..41879e6bc 100644 --- a/kcontrol/pics/cr64-device-laptop.png +++ b/kcontrol/pics/cr64-device-laptop.png diff --git a/kcontrol/randr/tderandrtray.h b/kcontrol/randr/tderandrtray.h index 8f382922f..334e1ef31 100644 --- a/kcontrol/randr/tderandrtray.h +++ b/kcontrol/randr/tderandrtray.h @@ -24,13 +24,14 @@ #include <ksystemtray.h> #include <kglobalaccel.h> -#include <libtderandr/libtderandr.h> #ifdef __TDE_HAVE_TDEHWLIB #include <tdehardwaredevices.h> #else #define TDEGenericDevice void #endif +#include <libtderandr/libtderandr.h> + class KHelpMenu; class TDEPopupMenu; diff --git a/kcontrol/tdefontinst/kcmfontinst/cr16-action-newfont.png b/kcontrol/tdefontinst/kcmfontinst/cr16-action-newfont.png Binary files differindex 61eef357e..96211d80e 100644 --- a/kcontrol/tdefontinst/kcmfontinst/cr16-action-newfont.png +++ b/kcontrol/tdefontinst/kcmfontinst/cr16-action-newfont.png diff --git a/kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.png b/kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.png Binary files differindex 049197a35..5804667fd 100644 --- a/kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.png +++ b/kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.png diff --git a/kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.png b/kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.png Binary files differindex 9cd3d57bc..746bbc703 100644 --- a/kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.png +++ b/kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.png diff --git a/kcontrol/tdm/tdm-appear.cpp b/kcontrol/tdm/tdm-appear.cpp index 8d3f848b5..cfd008481 100644 --- a/kcontrol/tdm/tdm-appear.cpp +++ b/kcontrol/tdm/tdm-appear.cpp @@ -479,6 +479,8 @@ void TDMAppearanceWidget::save() if (!sakwarning) { config->setGroup("X-:*-Greeter"); config->writeEntry("UseSAK", sakbox->isChecked()); + config->setGroup("X-*-Greeter"); + config->deleteEntry("UseSAK"); } // Enable/disable tsak as needed @@ -547,7 +549,12 @@ void TDMAppearanceWidget::load() // See if the SAK is enabled if (!sakwarning) { - config->setGroup("X-:*-Greeter"); + if (config->hasGroup("X-:*-Greeter")) { + config->setGroup("X-:*-Greeter"); + } + else { + config->setGroup("X-*-Greeter"); + } sakbox->setChecked(config->readBoolEntry("UseSAK", false)); } else { diff --git a/kdcop/kdcopwindow.cpp b/kdcop/kdcopwindow.cpp index 92e226852..9d7769808 100644 --- a/kdcop/kdcopwindow.cpp +++ b/kdcop/kdcopwindow.cpp @@ -326,7 +326,7 @@ KDCOPWindow::KDCOPWindow(TQWidget *parent, const char * name) "application-x-executable", CTRL + Key_E, TQT_TQOBJECT(this), - TQT_SLOT(slotCallFunction()), + TQT_SLOT(slotItemExecuted()), actionCollection(), "execute" ); @@ -378,7 +378,7 @@ void KDCOPWindow::slotCurrentChanged( TQListViewItem* i ) } -void KDCOPWindow::slotCallFunction() +void KDCOPWindow::slotItemExecuted() { slotCallFunction( mainView->lv->currentItem() ); } @@ -395,7 +395,10 @@ void KDCOPWindow::slotCallFunction( TQListViewItem* it ) DCOPBrowserItem * item = static_cast<DCOPBrowserItem *>(it); if (item->type() != DCOPBrowserItem::Function) + { + it->setOpen(!it->isOpen()); return; + } DCOPBrowserFunctionItem * fitem = static_cast<DCOPBrowserFunctionItem *>(item); diff --git a/kdcop/kdcopwindow.h b/kdcop/kdcopwindow.h index bf0fe532e..ed5988bae 100644 --- a/kdcop/kdcopwindow.h +++ b/kdcop/kdcopwindow.h @@ -30,7 +30,7 @@ class KDCOPWindow : public TDEMainWindow protected slots: void slotCurrentChanged( TQListViewItem* item ); - void slotCallFunction(); + void slotItemExecuted(); void slotCallFunction( TQListViewItem* item ); void slotApplicationRegistered(const TQCString &); void slotApplicationUnregistered(const TQCString &); diff --git a/kdesktop/init/My_Documents b/kdesktop/init/My_Documents index 497f34c40..d465deb64 100644 --- a/kdesktop/init/My_Documents +++ b/kdesktop/init/My_Documents @@ -4,9 +4,9 @@ Icon=folder_wordprocessing Name=My Documents Name[af]=Dokument Gids Name[ar]=مستنداتي -Name[be]=ТÑчка Ð´Ð»Ñ Ð´Ð°ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñž -Name[bg]=Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸ -Name[bn]=ডকà§à¦®à§‡à¦¨à§à¦Ÿ ফোলà§à¦¡à¦¾à¦° +Name[be]=Тэчка для дакументаў +Name[bg]=Директория с документи +Name[bn]=ডকমেনট ফোলডার Name[br]=Renkell an teulioù Name[bs]=Direktorij dokumenata Name[ca]=Carpeta de documents diff --git a/kdesktop/lock/CMakeLists.txt b/kdesktop/lock/CMakeLists.txt index 2bbe4b289..a0ec2f08a 100644 --- a/kdesktop/lock/CMakeLists.txt +++ b/kdesktop/lock/CMakeLists.txt @@ -19,10 +19,12 @@ include_directories( ${CMAKE_SOURCE_DIR}/kcheckpass ${TDE_INCLUDE_DIR} ${TQT_INCLUDE_DIRS} + ${KRB5_INCLUDE_DIRS} ) link_directories( ${TQT_LIBRARY_DIRS} + ${TDE_LIB_DIR} ) @@ -38,6 +40,7 @@ set( ${target}_SRCS tde_add_executable( ${target} AUTOMOC SOURCES ${${target}_SRCS} LINK kdesktopsettings-static dmctl-static tdeio-shared Xext - pthread ${GL_LIBRARIES} "${LINKER_IMMEDIATE_BINDING_FLAGS}" + pthread ${GL_LIBRARIES} ${LIBTDELDAP_LIBRARIES} + "${LINKER_IMMEDIATE_BINDING_FLAGS}" DESTINATION ${BIN_INSTALL_DIR} ) diff --git a/kdesktop/lock/autologout.cc b/kdesktop/lock/autologout.cc index 7d6bf6ff1..6e05c439d 100644 --- a/kdesktop/lock/autologout.cc +++ b/kdesktop/lock/autologout.cc @@ -1,6 +1,6 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // // Copyright (c) 2004 Chris Howells <howells@kde.org> @@ -33,88 +33,88 @@ extern bool trinity_desktop_lock_use_system_modal_dialogs; AutoLogout::AutoLogout(LockProcess *parent) : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))) { - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - setCaption(i18n("Automatic Logout Notification")); - - frame = new TQFrame(this); - if (trinity_desktop_lock_use_system_modal_dialogs) - frame->setFrameStyle( TQFrame::NoFrame ); - else - frame->setFrameStyle(TQFrame::Panel | TQFrame::Raised); - frame->setLineWidth(2); - - TQLabel *pixLabel = new TQLabel( frame, "pixlabel" ); - pixLabel->setPixmap(DesktopIcon("system-log-out")); - - TQLabel *greetLabel = new TQLabel(i18n("<nobr><qt><b>Automatic Log Out</b></qt><nobr>"), frame); - TQLabel *infoLabel = new TQLabel(i18n("<qt>To prevent being logged out, resume using this session by moving the mouse or pressing a key.</qt>"), frame); - - mStatusLabel = new TQLabel("<b> </b>", frame); - mStatusLabel->setAlignment(TQLabel::AlignCenter); - - TQLabel *mProgressLabel = new TQLabel("Time Remaining:", frame); - mProgressRemaining = new TQProgressBar(frame); - mProgressRemaining->setPercentageVisible(false); - - TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); - unlockDialogLayout->addWidget( frame ); - - frameLayout = new TQGridLayout(frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint()); - frameLayout->addMultiCellWidget(pixLabel, 0, 2, 0, 0, Qt::AlignCenter | Qt::AlignTop); - frameLayout->addWidget(greetLabel, 0, 1); - frameLayout->addWidget(mStatusLabel, 1, 1); - frameLayout->addWidget(infoLabel, 2, 1); - frameLayout->addWidget(mProgressLabel, 3, 1); - frameLayout->addWidget(mProgressRemaining, 4, 1); - - // get the time remaining in seconds for the status label - mRemaining = COUNTDOWN * 25; - - mProgressRemaining->setTotalSteps(COUNTDOWN * 25); - - updateInfo(mRemaining); - - mCountdownTimerId = startTimer(1000/25); - - connect(tqApp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity())); - - setFixedSize( sizeHint() ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + setCaption(i18n("Automatic Logout Notification")); + + frame = new TQFrame(this); + if (trinity_desktop_lock_use_system_modal_dialogs) { + frame->setFrameStyle( TQFrame::NoFrame ); + } + else { + frame->setFrameStyle(TQFrame::Panel | TQFrame::Raised); + } + frame->setLineWidth(2); + + TQLabel *pixLabel = new TQLabel( frame, "pixlabel" ); + pixLabel->setPixmap(DesktopIcon("system-log-out")); + + TQLabel *greetLabel = new TQLabel(i18n("<nobr><qt><b>Automatic Log Out</b></qt><nobr>"), frame); + TQLabel *infoLabel = new TQLabel(i18n("<qt>To prevent being logged out, resume using this session by moving the mouse or pressing a key.</qt>"), frame); + + mStatusLabel = new TQLabel("<b> </b>", frame); + mStatusLabel->setAlignment(TQLabel::AlignCenter); + + TQLabel *mProgressLabel = new TQLabel("Time Remaining:", frame); + mProgressRemaining = new TQProgressBar(frame); + mProgressRemaining->setPercentageVisible(false); + + TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); + unlockDialogLayout->addWidget( frame ); + + frameLayout = new TQGridLayout(frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint()); + frameLayout->addMultiCellWidget(pixLabel, 0, 2, 0, 0, Qt::AlignCenter | Qt::AlignTop); + frameLayout->addWidget(greetLabel, 0, 1); + frameLayout->addWidget(mStatusLabel, 1, 1); + frameLayout->addWidget(infoLabel, 2, 1); + frameLayout->addWidget(mProgressLabel, 3, 1); + frameLayout->addWidget(mProgressRemaining, 4, 1); + + // get the time remaining in seconds for the status label + mRemaining = COUNTDOWN * 25; + + mProgressRemaining->setTotalSteps(COUNTDOWN * 25); + + updateInfo(mRemaining); + + mCountdownTimerId = startTimer(1000/25); + + connect(tqApp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity())); + + setFixedSize( sizeHint() ); } AutoLogout::~AutoLogout() { - hide(); + hide(); } void AutoLogout::updateInfo(int timeout) { - mStatusLabel->setText(i18n("<nobr><qt>You will be automatically logged out in 1 second</qt></nobr>", - "<nobr><qt>You will be automatically logged out in %n seconds</qt></nobr>", - timeout / 25) ); - mProgressRemaining->setProgress(timeout); + mStatusLabel->setText(i18n("<nobr><qt>You will be automatically logged out in 1 second</qt></nobr>", + "<nobr><qt>You will be automatically logged out in %n seconds</qt></nobr>", + timeout / 25) ); + mProgressRemaining->setProgress(timeout); } void AutoLogout::timerEvent(TQTimerEvent *ev) { - if (ev->timerId() == mCountdownTimerId) - { - updateInfo(mRemaining); - --mRemaining; - if (mRemaining < 0) - { - logout(); + if (ev->timerId() == mCountdownTimerId) { + updateInfo(mRemaining); + --mRemaining; + if (mRemaining < 0) { + logout(); + } } - } } void AutoLogout::slotActivity() { - accept(); + accept(); } void AutoLogout::logout() @@ -125,8 +125,8 @@ void AutoLogout::logout() void AutoLogout::show() { - TQDialog::show(); - TQApplication::flushX(); + TQDialog::show(); + TQApplication::flushX(); } #include "autologout.moc" diff --git a/kdesktop/lock/autologout.h b/kdesktop/lock/autologout.h index c15a47f07..89cbb880e 100644 --- a/kdesktop/lock/autologout.h +++ b/kdesktop/lock/autologout.h @@ -1,6 +1,6 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // // Copyright (c) 1999 Martin R. Jones <mjones@kde.org> // Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org> @@ -22,29 +22,29 @@ class TQProgressBar; class AutoLogout : public TQDialog { - Q_OBJECT - -public: - AutoLogout(LockProcess *parent); - ~AutoLogout(); - virtual void show(); - -protected: - virtual void timerEvent(TQTimerEvent *); - -private slots: - void slotActivity(); - -private: - void updateInfo(int); - TQFrame *frame; - TQGridLayout *frameLayout; - TQLabel *mStatusLabel; - int mCountdownTimerId; - int mRemaining; - TQTimer countDownTimer; - TQProgressBar *mProgressRemaining; - void logout(); + Q_OBJECT + + public: + AutoLogout(LockProcess *parent); + ~AutoLogout(); + virtual void show(); + + protected: + virtual void timerEvent(TQTimerEvent *); + + private slots: + void slotActivity(); + + private: + void updateInfo(int); + TQFrame *frame; + TQGridLayout *frameLayout; + TQLabel *mStatusLabel; + int mCountdownTimerId; + int mRemaining; + TQTimer countDownTimer; + TQProgressBar *mProgressRemaining; + void logout(); }; #endif diff --git a/kdesktop/lock/infodlg.cc b/kdesktop/lock/infodlg.cc index d248d7bd0..3efaf060d 100644 --- a/kdesktop/lock/infodlg.cc +++ b/kdesktop/lock/infodlg.cc @@ -1,8 +1,8 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // -// Copyright (c) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> #include <config.h> @@ -62,86 +62,88 @@ extern bool trinity_desktop_lock_use_system_modal_dialogs; // Simple dialog for displaying an unlock status or recurring error message // InfoDlg::InfoDlg(LockProcess *parent) - : TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), - mUnlockingFailed(false) + : TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), + mUnlockingFailed(false) { - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - setCaption(i18n("Information")); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + setCaption(i18n("Information")); - frame = new TQFrame( this ); - if (trinity_desktop_lock_use_system_modal_dialogs) - frame->setFrameStyle( TQFrame::NoFrame ); - else - frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); - frame->setLineWidth( 2 ); + frame = new TQFrame( this ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + frame->setFrameStyle( TQFrame::NoFrame ); + } + else { + frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); + } + frame->setLineWidth( 2 ); - mpixLabel = new TQLabel( frame, "pixlabel" ); - mpixLabel->setPixmap(DesktopIcon("unlock")); + mpixLabel = new TQLabel( frame, "pixlabel" ); + mpixLabel->setPixmap(DesktopIcon("unlock")); - KUser user; + KUser user; - mStatusLabel = new TQLabel( "<b> </b>", frame ); - mStatusLabel->setAlignment( TQLabel::AlignCenter ); + mStatusLabel = new TQLabel( "<b> </b>", frame ); + mStatusLabel->setAlignment( TQLabel::AlignCenter ); - TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); - unlockDialogLayout->addWidget( frame ); + TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); + unlockDialogLayout->addWidget( frame ); - TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - layStatus->addWidget( mStatusLabel ); + TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + layStatus->addWidget( mStatusLabel ); - frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - frameLayout->addMultiCellWidget( mpixLabel, 0, 2, 0, 0, Qt::AlignTop ); - frameLayout->addLayout( layStatus, 1, 1 ); + frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + frameLayout->addMultiCellWidget( mpixLabel, 0, 2, 0, 0, Qt::AlignTop ); + frameLayout->addLayout( layStatus, 1, 1 ); - installEventFilter(this); - setFixedSize( sizeHint() ); -} + installEventFilter(this); + setFixedSize( sizeHint() ); + } InfoDlg::~InfoDlg() { - hide(); + hide(); } void InfoDlg::updateLabel(TQString &txt) { - mStatusLabel->setPaletteForegroundColor(Qt::black); - mStatusLabel->setText("<b>" + txt + "</b>"); + mStatusLabel->setPaletteForegroundColor(Qt::black); + mStatusLabel->setText("<b>" + txt + "</b>"); } void InfoDlg::setUnlockIcon() { - mpixLabel->setPixmap(DesktopIcon("unlock")); + mpixLabel->setPixmap(DesktopIcon("unlock")); } void InfoDlg::setKDEIcon() { - mpixLabel->setPixmap(DesktopIcon("about_kde")); + mpixLabel->setPixmap(DesktopIcon("about_kde")); } void InfoDlg::setInfoIcon() { - mpixLabel->setPixmap(DesktopIcon("messagebox_info")); + mpixLabel->setPixmap(DesktopIcon("messagebox_info")); } void InfoDlg::setWarningIcon() { - mpixLabel->setPixmap(DesktopIcon("messagebox_warning")); + mpixLabel->setPixmap(DesktopIcon("messagebox_warning")); } void InfoDlg::setErrorIcon() { - mpixLabel->setPixmap(DesktopIcon("messagebox_critical")); + mpixLabel->setPixmap(DesktopIcon("messagebox_critical")); } void InfoDlg::show() { - TQDialog::show(); - TQApplication::flushX(); + TQDialog::show(); + TQApplication::flushX(); } #include "infodlg.moc" diff --git a/kdesktop/lock/infodlg.h b/kdesktop/lock/infodlg.h index bb974282f..3daf4d2ce 100644 --- a/kdesktop/lock/infodlg.h +++ b/kdesktop/lock/infodlg.h @@ -1,8 +1,8 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // -// Copyright (c) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> // #ifndef __INFODLG_H__ @@ -26,30 +26,30 @@ class TQListView; // class InfoDlg : public TQDialog { - Q_OBJECT - -public: - InfoDlg(LockProcess *parent); - ~InfoDlg(); - virtual void show(); - - void updateLabel( TQString &txt ); - void setUnlockIcon(); - void setKDEIcon(); - void setInfoIcon(); - void setWarningIcon(); - void setErrorIcon(); - -private: - TQFrame *frame; - TQGridLayout *frameLayout; - TQLabel *mStatusLabel; - TQLabel *mpixLabel; - int mCapsLocked; - bool mUnlockingFailed; - TQStringList layoutsList; - TQStringList::iterator currLayout; - int sPid, sFd; + Q_OBJECT + + public: + InfoDlg(LockProcess *parent); + ~InfoDlg(); + virtual void show(); + + void updateLabel( TQString &txt ); + void setUnlockIcon(); + void setKDEIcon(); + void setInfoIcon(); + void setWarningIcon(); + void setErrorIcon(); + + private: + TQFrame *frame; + TQGridLayout *frameLayout; + TQLabel *mStatusLabel; + TQLabel *mpixLabel; + int mCapsLocked; + bool mUnlockingFailed; + TQStringList layoutsList; + TQStringList::iterator currLayout; + int sPid, sFd; }; #endif diff --git a/kdesktop/lock/lockdlg.cc b/kdesktop/lock/lockdlg.cc index 763d7bf95..d51536dca 100644 --- a/kdesktop/lock/lockdlg.cc +++ b/kdesktop/lock/lockdlg.cc @@ -1,10 +1,11 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // // Copyright (c) 1999 Martin R. Jones <mjones@kde.org> // Copyright (c) 2003 Chris Howells <howells@kde.org> // Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> #include <config.h> @@ -42,6 +43,7 @@ #include <tqlistview.h> #include <tqheader.h> #include <tqcheckbox.h> +#include <tqfile.h> #include <ctype.h> #include <unistd.h> @@ -56,6 +58,10 @@ #include <X11/Xatom.h> #include <fixx11h.h> +#ifdef HAVE_KRB5 +#include <tde/libtdeldap.h> +#endif + #ifndef AF_LOCAL # define AF_LOCAL AF_UNIX #endif @@ -75,12 +81,15 @@ int dialogHideTimeout = 10*1000; // Simple dialog for entering a password. // PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin) - : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), - mPlugin( plugin ), - mCapsLocked(-1), - mUnlockingFailed(false) + : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), + mPlugin( plugin ), + mCapsLocked(-1), + mUnlockingFailed(false), + validUserCardInserted(false), + showInfoMessages(true), + mCardLoginInProgress(false) { - init(plugin); + init(plugin); } // @@ -88,239 +97,249 @@ PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin) // This version includes support for displaying the date and time the lock process was started // PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin, TQDateTime lockStartDateTime) - : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), - mPlugin( plugin ), - mCapsLocked(-1), - mUnlockingFailed(false) + : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), + mPlugin( plugin ), + mCapsLocked(-1), + mUnlockingFailed(false), + showInfoMessages(true), + mCardLoginInProgress(false) { - m_lockStartDT = lockStartDateTime; - init(plugin); + m_lockStartDT = lockStartDateTime; + init(plugin); } void PasswordDlg::init(GreeterPluginHandle *plugin) { - dialogHideTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000; - - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - setCaption(i18n("Desktop Session Locked")); - - frame = new TQFrame( this ); - if (trinity_desktop_lock_use_system_modal_dialogs) - frame->setFrameStyle( TQFrame::NoFrame ); - else - frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); - frame->setLineWidth( 2 ); - - TQLabel *pixLabel = NULL; - if (!trinity_desktop_lock_use_system_modal_dialogs) { - pixLabel = new TQLabel( frame, "pixlabel" ); - pixLabel->setPixmap(DesktopIcon("system-lock-screen")); - } - - KUser user; - TQLabel *greetLabel; - if (trinity_desktop_lock_use_system_modal_dialogs) { - greetLabel = new TQLabel( user.fullName().isEmpty() ? - "<b>" + i18n("This computer is in use and has been locked.") + "</b>" : - "<b>" + i18n("This computer is in use and has been locked.") + "</b><br><nobr>" + i18n("Only '%1' may unlock this session.").arg( user.fullName() ), frame ); - } - else { - greetLabel = new TQLabel( user.fullName().isEmpty() ? - i18n("<nobr><b>The session is locked</b><br>") : - i18n("<nobr><b>The session was locked by %1</b><br>").arg( user.fullName() ), frame ); - } - - TQLabel *lockDTLabel = NULL; - if ((trinity_desktop_lock_use_system_modal_dialogs) && (!m_lockStartDT.isNull())) { - lockDTLabel = new TQLabel(i18n("This session has been locked since %1").arg(m_lockStartDT.toString()), frame); - } - - mStatusLabel = new TQLabel( "<b> </b>", frame ); - mStatusLabel->setAlignment( TQLabel::AlignCenter ); - - mLayoutButton = new TQPushButton( frame ); - mLayoutButton->setFlat( true ); - - KSeparator *sep = new KSeparator( KSeparator::HLine, frame ); - - mNewSessButton = new KPushButton( KGuiItem(i18n("Sw&itch User..."), "fork"), frame ); - ok = new KPushButton( i18n("Unl&ock"), frame ); - ok->setDefault(true); - - bool show_cancel_button = !trinity_desktop_lock_hide_cancel_button || - trinity_desktop_lock_use_sak || - !trinity_desktop_lock_use_system_modal_dialogs; - if (show_cancel_button) - cancel = new KPushButton( KStdGuiItem::cancel(), frame ); - else - cancel = NULL; - - greet = plugin->info->create( this, 0, this, mLayoutButton, TQString::null, - KGreeterPlugin::Authenticate, KGreeterPlugin::ExUnlock ); - - TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); - unlockDialogLayout->addWidget( frame ); - - TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - layStatus->addWidget( mStatusLabel ); - layStatus->addWidget( mLayoutButton ); - - TQHBoxLayout *layButtons = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - layButtons->addWidget( mNewSessButton ); - layButtons->addStretch(); - layButtons->addWidget(ok); - if (show_cancel_button) - layButtons->addWidget(cancel); - - if (trinity_desktop_lock_use_system_modal_dialogs) { - KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); - - if (!m_lockStartDT.isNull()) { - frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - frameLayout->addMultiCellWidget( theader, 0, 0, 0, 2, Qt::AlignTop ); - frameLayout->addWidget( greetLabel, 1, 1 ); - frameLayout->addWidget( lockDTLabel, 2, 1 ); - frameLayout->addItem( greet->getLayoutItem(), 3, 1 ); - frameLayout->addLayout( layStatus, 4, 1 ); - frameLayout->addMultiCellWidget( sep, 5, 5, 0, 1 ); - frameLayout->addMultiCellLayout( layButtons, 6, 6, 0, 1 ); - } - else { - frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - frameLayout->addMultiCellWidget( theader, 0, 0, 0, 2, Qt::AlignTop ); - frameLayout->addWidget( greetLabel, 1, 1 ); - frameLayout->addItem( greet->getLayoutItem(), 2, 1 ); - frameLayout->addLayout( layStatus, 3, 1 ); - frameLayout->addMultiCellWidget( sep, 4, 4, 0, 1 ); - frameLayout->addMultiCellLayout( layButtons, 5, 5, 0, 1 ); - } - } - else { - frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - frameLayout->addMultiCellWidget( pixLabel, 0, 2, 0, 0, Qt::AlignTop ); - frameLayout->addWidget( greetLabel, 0, 1 ); - frameLayout->addItem( greet->getLayoutItem(), 1, 1 ); - frameLayout->addLayout( layStatus, 2, 1 ); - frameLayout->addMultiCellWidget( sep, 3, 3, 0, 1 ); - frameLayout->addMultiCellLayout( layButtons, 4, 4, 0, 1 ); - } - - if (show_cancel_button) - { - setTabOrder( ok, cancel ); - setTabOrder( cancel, mNewSessButton ); - } - else - { - setTabOrder( ok, mNewSessButton ); - } - setTabOrder( mNewSessButton, mLayoutButton ); - - connect(mLayoutButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(layoutClicked())); - if (show_cancel_button) - { - connect(cancel, TQT_SIGNAL(clicked()), TQT_SLOT(reject())); - } - connect(ok, TQT_SIGNAL(clicked()), TQT_SLOT(slotOK())); - connect(mNewSessButton, TQT_SIGNAL(clicked()), TQT_SLOT(slotSwitchUser())); - - if (!DM().isSwitchable() || !kapp->authorize("switch_user")) - mNewSessButton->hide(); - - installEventFilter(this); - setFixedSize( sizeHint() ); - - mFailedTimerId = 0; - mTimeoutTimerId = startTimer(PASSDLG_HIDE_TIMEOUT); - connect(tqApp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity()) ); - - greet->start(); - - DCOPRef kxkb("kxkb", "kxkb"); - if( !kxkb.isNull() ) { - DCOPReply reply = kxkb.call("getLayoutsList"); - if (reply.isValid()) { - layoutsList = reply; - } - reply = kxkb.call("getCurrentLayout"); - TQString currentLayout; - if (reply.isValid()) { - reply.get(currentLayout); - } - if( !currentLayout.isEmpty() && layoutsList.count() > 1 ) { - currLayout = layoutsList.find(currentLayout); - if (currLayout == layoutsList.end()) - setLayoutText("err"); - else - setLayoutText(*currLayout); - } else - mLayoutButton->hide(); - } else { - mLayoutButton->hide(); // no kxkb running - } - capsLocked(); + dialogHideTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000; + + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + setCaption(i18n("Desktop Session Locked")); + + frame = new TQFrame( this ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + frame->setFrameStyle( TQFrame::NoFrame ); + } + else { + frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); + } + frame->setLineWidth( 2 ); + + TQLabel *pixLabel = NULL; + if (!trinity_desktop_lock_use_system_modal_dialogs) { + pixLabel = new TQLabel( frame, "pixlabel" ); + pixLabel->setPixmap(DesktopIcon("system-lock-screen")); + } + + KUser user; + TQLabel *greetLabel; + if (trinity_desktop_lock_use_system_modal_dialogs) { + greetLabel = new TQLabel( user.fullName().isEmpty() ? + "<b>" + i18n("This computer is in use and has been locked.") + "</b>" : + "<b>" + i18n("This computer is in use and has been locked.") + "</b><br><nobr>" + i18n("Only '%1' may unlock this session.").arg( user.fullName() ), frame ); + } + else { + greetLabel = new TQLabel( user.fullName().isEmpty() ? + i18n("<nobr><b>The session is locked</b><br>") : + i18n("<nobr><b>The session was locked by %1</b><br>").arg( user.fullName() ), frame ); + } + + TQLabel *lockDTLabel = NULL; + if ((trinity_desktop_lock_use_system_modal_dialogs) && (!m_lockStartDT.isNull())) { + lockDTLabel = new TQLabel(i18n("This session has been locked since %1").arg(m_lockStartDT.toString()), frame); + } + + mStatusLabel = new TQLabel( "<b> </b>", frame ); + mStatusLabel->setAlignment( TQLabel::AlignCenter ); + + mLayoutButton = new TQPushButton( frame ); + mLayoutButton->setFlat( true ); + + KSeparator *sep = new KSeparator( KSeparator::HLine, frame ); + + mNewSessButton = new KPushButton( KGuiItem(i18n("Sw&itch User..."), "fork"), frame ); + ok = new KPushButton( i18n("Unl&ock"), frame ); + ok->setDefault(true); + + bool show_cancel_button = !trinity_desktop_lock_hide_cancel_button + || trinity_desktop_lock_use_sak + || !trinity_desktop_lock_use_system_modal_dialogs; + if (show_cancel_button) { + cancel = new KPushButton( KStdGuiItem::cancel(), frame ); + } + else { + cancel = NULL; + } + + greet = plugin->info->create( this, 0, this, mLayoutButton, TQString::null, + KGreeterPlugin::Authenticate, KGreeterPlugin::ExUnlock ); + + TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); + unlockDialogLayout->addWidget( frame ); + + TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + layStatus->addWidget( mStatusLabel ); + layStatus->addWidget( mLayoutButton ); + + TQHBoxLayout *layButtons = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + layButtons->addWidget( mNewSessButton ); + layButtons->addStretch(); + layButtons->addWidget(ok); + if (show_cancel_button) { + layButtons->addWidget(cancel); + } + + if (trinity_desktop_lock_use_system_modal_dialogs) { + KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); + + if (!m_lockStartDT.isNull()) { + frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + frameLayout->addMultiCellWidget( theader, 0, 0, 0, 2, Qt::AlignTop ); + frameLayout->addWidget( greetLabel, 1, 1 ); + frameLayout->addWidget( lockDTLabel, 2, 1 ); + frameLayout->addItem( greet->getLayoutItem(), 3, 1 ); + frameLayout->addLayout( layStatus, 4, 1 ); + frameLayout->addMultiCellWidget( sep, 5, 5, 0, 1 ); + frameLayout->addMultiCellLayout( layButtons, 6, 6, 0, 1 ); + } + else { + frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + frameLayout->addMultiCellWidget( theader, 0, 0, 0, 2, Qt::AlignTop ); + frameLayout->addWidget( greetLabel, 1, 1 ); + frameLayout->addItem( greet->getLayoutItem(), 2, 1 ); + frameLayout->addLayout( layStatus, 3, 1 ); + frameLayout->addMultiCellWidget( sep, 4, 4, 0, 1 ); + frameLayout->addMultiCellLayout( layButtons, 5, 5, 0, 1 ); + } + } + else { + frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + frameLayout->addMultiCellWidget( pixLabel, 0, 2, 0, 0, Qt::AlignTop ); + frameLayout->addWidget( greetLabel, 0, 1 ); + frameLayout->addItem( greet->getLayoutItem(), 1, 1 ); + frameLayout->addLayout( layStatus, 2, 1 ); + frameLayout->addMultiCellWidget( sep, 3, 3, 0, 1 ); + frameLayout->addMultiCellLayout( layButtons, 4, 4, 0, 1 ); + } + + if (show_cancel_button) { + setTabOrder( ok, cancel ); + setTabOrder( cancel, mNewSessButton ); + } + else { + setTabOrder( ok, mNewSessButton ); + } + setTabOrder( mNewSessButton, mLayoutButton ); + + connect(mLayoutButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(layoutClicked())); + if (show_cancel_button) { + connect(cancel, TQT_SIGNAL(clicked()), TQT_SLOT(reject())); + } + connect(ok, TQT_SIGNAL(clicked()), TQT_SLOT(slotOK())); + connect(mNewSessButton, TQT_SIGNAL(clicked()), TQT_SLOT(slotSwitchUser())); + + if (!DM().isSwitchable() || !kapp->authorize("switch_user")) { + mNewSessButton->hide(); + } + + installEventFilter(this); + setFixedSize( sizeHint() ); + + mFailedTimerId = 0; + mTimeoutTimerId = startTimer(PASSDLG_HIDE_TIMEOUT); + connect(tqApp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity()) ); + + greet->setInfoMessageDisplay(showInfoMessages); + greet->start(); + + DCOPRef kxkb("kxkb", "kxkb"); + if( !kxkb.isNull() ) { + DCOPReply reply = kxkb.call("getLayoutsList"); + if (reply.isValid()) { + layoutsList = reply; + } + reply = kxkb.call("getCurrentLayout"); + TQString currentLayout; + if (reply.isValid()) { + reply.get(currentLayout); + } + if( !currentLayout.isEmpty() && layoutsList.count() > 1 ) { + currLayout = layoutsList.find(currentLayout); + if (currLayout == layoutsList.end()) + setLayoutText("err"); + else + setLayoutText(*currLayout); + } + else { + mLayoutButton->hide(); + } + } + else { + mLayoutButton->hide(); // no kxkb running + } + capsLocked(); + + if (static_cast< LockProcess* >(parent())->cryptographicCardDevice()) { + attemptCardLogin(); + } } PasswordDlg::~PasswordDlg() { - hide(); - frameLayout->removeItem( greet->getLayoutItem() ); - delete greet; + hide(); + frameLayout->removeItem( greet->getLayoutItem() ); + delete greet; } void PasswordDlg::reject() { - if (!trinity_desktop_lock_hide_cancel_button || trinity_desktop_lock_use_sak || - !trinity_desktop_lock_use_system_modal_dialogs || trinity_desktop_lock_autohide_lockdlg) - { - TQDialog::reject(); - } + if (!trinity_desktop_lock_hide_cancel_button + || trinity_desktop_lock_use_sak + || !trinity_desktop_lock_use_system_modal_dialogs + || trinity_desktop_lock_autohide_lockdlg) { + TQDialog::reject(); + } } void PasswordDlg::layoutClicked() { + if( ++currLayout == layoutsList.end() ) { + currLayout = layoutsList.begin(); + } - if( ++currLayout == layoutsList.end() ) - currLayout = layoutsList.begin(); - - DCOPRef kxkb("kxkb", "kxkb"); - setLayoutText( kxkb.call("setLayout", *currLayout) ? *currLayout : "err" ); + DCOPRef kxkb("kxkb", "kxkb"); + setLayoutText( kxkb.call("setLayout", *currLayout) ? *currLayout : "err" ); } void PasswordDlg::setLayoutText( const TQString &txt ) { - mLayoutButton->setText( txt ); - TQSize sz = mLayoutButton->fontMetrics().size( 0, txt ); - int mrg = mLayoutButton->style().pixelMetric( TQStyle::PM_ButtonMargin ) * 2; - mLayoutButton->setFixedSize( sz.width() + mrg, sz.height() + mrg ); + mLayoutButton->setText( txt ); + TQSize sz = mLayoutButton->fontMetrics().size( 0, txt ); + int mrg = mLayoutButton->style().pixelMetric( TQStyle::PM_ButtonMargin ) * 2; + mLayoutButton->setFixedSize( sz.width() + mrg, sz.height() + mrg ); } void PasswordDlg::updateLabel() { - if (mUnlockingFailed) - { - mStatusLabel->setPaletteForegroundColor(Qt::black); - mStatusLabel->setText(i18n("<b>Unlocking failed</b>")); -// mStatusLabel->show(); - } - else - if (mCapsLocked) - { - mStatusLabel->setPaletteForegroundColor(Qt::red); - mStatusLabel->setText(i18n("<b>Warning: Caps Lock on</b>")); -// mStatusLabel->show(); - } - else - { - mStatusLabel->setText("<b> </b>"); -// mStatusLabel->hide(); - } + if (mUnlockingFailed) { + mStatusLabel->setPaletteForegroundColor(Qt::black); + mStatusLabel->setText(i18n("<b>Unlocking failed</b>")); +// mStatusLabel->show(); + } + else if (mCapsLocked) { + mStatusLabel->setPaletteForegroundColor(Qt::red); + mStatusLabel->setText(i18n("<b>Warning: Caps Lock on</b>")); +// mStatusLabel->show(); + } + else { + mStatusLabel->setText("<b> </b>"); +// mStatusLabel->hide(); + } } //--------------------------------------------------------------------------- @@ -329,240 +348,294 @@ void PasswordDlg::updateLabel() // void PasswordDlg::timerEvent(TQTimerEvent *ev) { - if (ev->timerId() == mTimeoutTimerId) - { - if (trinity_desktop_lock_autohide_lockdlg) - { - // Force dialog rejection regardless of the value of trinity_desktop_lock_hide_cancel_button - TQDialog::reject(); - } - else - { - slotActivity(); - } - } - else if (ev->timerId() == mFailedTimerId) - { - killTimer(mFailedTimerId); - mFailedTimerId = 0; - // Show the normal password prompt. - mUnlockingFailed = false; - updateLabel(); - ok->setEnabled(true); - if (cancel) cancel->setEnabled(true); - mNewSessButton->setEnabled( true ); - greet->revive(); - greet->start(); - } + if (ev->timerId() == mTimeoutTimerId) { + if (trinity_desktop_lock_autohide_lockdlg) { + // Force dialog rejection regardless of the value of trinity_desktop_lock_hide_cancel_button + TQDialog::reject(); + } + else { + slotActivity(); + } + } + else if (ev->timerId() == mFailedTimerId) { + killTimer(mFailedTimerId); + mFailedTimerId = 0; + // Show the normal password prompt. + mUnlockingFailed = false; + updateLabel(); + ok->setEnabled(true); + if (cancel) { + cancel->setEnabled(true); + } + mNewSessButton->setEnabled( true ); + greet->revive(); + greet->start(); + } } bool PasswordDlg::eventFilter(TQObject *, TQEvent *ev) { - if (ev->type() == TQEvent::KeyPress || ev->type() == TQEvent::KeyRelease) - capsLocked(); - return false; + if (ev->type() == TQEvent::KeyPress || ev->type() == TQEvent::KeyRelease) { + capsLocked(); + } + return false; } void PasswordDlg::slotActivity() { - if (mTimeoutTimerId) { - killTimer(mTimeoutTimerId); - mTimeoutTimerId = startTimer(PASSDLG_HIDE_TIMEOUT); - } + if (mTimeoutTimerId) { + killTimer(mTimeoutTimerId); + mTimeoutTimerId = startTimer(PASSDLG_HIDE_TIMEOUT); + } } ////// kckeckpass interface code int PasswordDlg::Reader (void *buf, int count) { - int ret, rlen; - - for (rlen = 0; rlen < count; ) { - dord: - ret = ::read (sFd, (void *)((char *)buf + rlen), count - rlen); - if (ret < 0) { - if (errno == EINTR) - goto dord; - if (errno == EAGAIN) - break; - return -1; - } - if (!ret) - break; - rlen += ret; - } - return rlen; + int ret, rlen; + + for (rlen = 0; rlen < count; ) { +dord: + ret = ::read (sFd, (void *)((char *)buf + rlen), count - rlen); + if (ret < 0) { + if (errno == EINTR) { + goto dord; + } + if (errno == EAGAIN) { + break; + } + return -1; + } + if (!ret) { + break; + } + rlen += ret; + } + return rlen; } bool PasswordDlg::GRead (void *buf, int count) { - return Reader (buf, count) == count; + return Reader (buf, count) == count; } bool PasswordDlg::GWrite (const void *buf, int count) { - return ::write (sFd, buf, count) == count; + return ::write (sFd, buf, count) == count; } bool PasswordDlg::GSendInt (int val) { - return GWrite (&val, sizeof(val)); + return GWrite (&val, sizeof(val)); } bool PasswordDlg::GSendStr (const char *buf) { - int len = buf ? ::strlen (buf) + 1 : 0; - return GWrite (&len, sizeof(len)) && GWrite (buf, len); + int len = buf ? ::strlen (buf) + 1 : 0; + return GWrite (&len, sizeof(len)) && GWrite (buf, len); } bool PasswordDlg::GSendArr (int len, const char *buf) { - return GWrite (&len, sizeof(len)) && GWrite (buf, len); + return GWrite (&len, sizeof(len)) && GWrite (buf, len); } bool PasswordDlg::GRecvInt (int *val) { - return GRead (val, sizeof(*val)); + return GRead (val, sizeof(*val)); } bool PasswordDlg::GRecvArr (char **ret) { - int len; - char *buf; - - if (!GRecvInt(&len)) - return false; - if (!len) { - *ret = 0; - return true; - } - if (!(buf = (char *)::malloc (len))) - return false; - *ret = buf; - return GRead (buf, len); + int len; + char *buf; + + if (!GRecvInt(&len)) { + return false; + } + if (!len) { + *ret = 0; + return true; + } + if (!(buf = (char *)::malloc (len))) { + return false; + } + *ret = buf; + return GRead (buf, len); } void PasswordDlg::reapVerify() { - ::close( sFd ); - int status; - pid_t retpid = ::waitpid( sPid, &status, 0 ); - if (retpid < 0) { - // FIXME - // ERROR - } - else { - if (WIFEXITED(status)) { - switch (WEXITSTATUS(status)) { - case AuthOk: - greet->succeeded(); - accept(); - return; - case AuthBad: - greet->failed(); - mUnlockingFailed = true; - updateLabel(); - mFailedTimerId = startTimer(1500); - ok->setEnabled(false); - if (cancel) cancel->setEnabled(false); - mNewSessButton->setEnabled( false ); - return; - case AuthAbort: - return; - } - } - else if (WIFSIGNALED(status)) { - // FIXME - // ERROR - } - } - cantCheck(); + ::close( sFd ); + int status; + pid_t retpid = ::waitpid( sPid, &status, 0 ); + if (retpid < 0) { + // FIXME + // ERROR + } + else { + if (WIFEXITED(status)) { + switch (WEXITSTATUS(status)) { + case AuthOk: + { + KUser userinfo; + TQString fileName = userinfo.homeDir() + "/.tde_card_login_state"; + TQFile flagFile(fileName); + if (validUserCardInserted) { + // Card was likely used to log in + if (flagFile.open(IO_WriteOnly)) { + flagFile.writeBlock("1\n", 2); + flagFile.close(); + } + } + else { + // Card was not used to log in + flagFile.remove(); + } + + // Signal success + greet->succeeded(); + accept(); + return; + } + case AuthBad: + greet->failed(); + mUnlockingFailed = true; + updateLabel(); + mFailedTimerId = startTimer(1500); + ok->setEnabled(false); + if (cancel) { + cancel->setEnabled(false); + } + mNewSessButton->setEnabled( false ); + return; + case AuthAbort: + return; + } + } + else if (WIFSIGNALED(status)) { + // FIXME + // ERROR + } + } + cantCheck(); } void PasswordDlg::handleVerify() { - int ret; - char *arr; - - while (GRecvInt( &ret )) { - switch (ret) { - case ConvGetBinary: - if (!GRecvArr( &arr )) - break; - greet->binaryPrompt( arr, false ); - if (arr) - ::free( arr ); - return; - case ConvGetNormal: - if (!GRecvArr( &arr )) - break; - greet->textPrompt( arr, true, false ); - if (arr) - ::free( arr ); - return; - case ConvGetHidden: - if (!GRecvArr( &arr )) - break; - greet->textPrompt( arr, false, false ); - if (arr) - ::free( arr ); - return; - case ConvPutInfo: - if (!GRecvArr( &arr )) - break; - if (!greet->textMessage( arr, false )) - static_cast< LockProcess* >(parent())->msgBox( TQMessageBox::Information, TQString::fromLocal8Bit( arr ) ); - ::free( arr ); - continue; - case ConvPutError: - if (!GRecvArr( &arr )) - break; - if (!greet->textMessage( arr, true )) - static_cast< LockProcess* >(parent())->msgBox( TQMessageBox::Warning, TQString::fromLocal8Bit( arr ) ); - ::free( arr ); - continue; - } - break; - } - reapVerify(); + int ret; + char *arr; + + while (GRecvInt( &ret )) { + switch (ret) { + case ConvGetBinary: + if (!GRecvArr( &arr )) + break; + greet->binaryPrompt( arr, false ); + if (arr) + ::free( arr ); + return; + case ConvGetNormal: + if (!GRecvArr( &arr )) + break; + greet->textPrompt( arr, true, false ); + if (arr) + ::free( arr ); + return; + case ConvGetHidden: + if (!GRecvArr( &arr )) + break; + if (arr && (arr[0] != 0)) { + // Reset password entry and change text + greet->start(); + greet->textPrompt( arr, false, false ); + + // Force relayout + setFixedSize( sizeHint().width(), sizeHint().height() + 1 ); + setFixedSize( sizeHint() ); + + // Check if cryptographic card login is being used + if (mCardLoginInProgress) { + // Attempt authentication if configured + TDECryptographicCardDevice* cdevice = static_cast<LockProcess*>(parent())->cryptographicCardDevice(); + if (cdevice) { + TQString autoPIN = cdevice->autoPIN(); + if (autoPIN != TQString::null) { + greet->setPassword(autoPIN); + TQTimer::singleShot(0, this, SLOT(slotOK())); + } + } + mCardLoginInProgress = false; + } + } + else { + greet->textPrompt( arr, false, false ); + } + if (arr) + ::free( arr ); + return; + case ConvPutInfo: + if (!GRecvArr( &arr )) + break; + if (!greet->textMessage( arr, false )) + static_cast< LockProcess* >(parent())->msgBox( TQMessageBox::Information, TQString::fromLocal8Bit( arr ) ); + ::free( arr ); + continue; + case ConvPutError: + if (!GRecvArr( &arr )) + break; + if (!greet->textMessage( arr, true )) + static_cast< LockProcess* >(parent())->msgBox( TQMessageBox::Warning, TQString::fromLocal8Bit( arr ) ); + ::free( arr ); + continue; + } + break; + } + reapVerify(); } ////// greeter plugin callbacks void PasswordDlg::gplugReturnText( const char *text, int tag ) { - GSendStr( text ); - if (text) - GSendInt( tag ); - handleVerify(); + GSendStr( text ); + if (text) { + GSendInt( tag ); + } + handleVerify(); } void PasswordDlg::gplugReturnBinary( const char *data ) { - if (data) { - unsigned const char *up = (unsigned const char *)data; - int len = up[3] | (up[2] << 8) | (up[1] << 16) | (up[0] << 24); - if (!len) - GSendArr( 4, data ); - else - GSendArr( len, data ); - } else - GSendArr( 0, 0 ); - handleVerify(); + if (data) { + unsigned const char *up = (unsigned const char *)data; + int len = up[3] | (up[2] << 8) | (up[1] << 16) | (up[0] << 24); + if (!len) { + GSendArr( 4, data ); + } + else { + GSendArr( len, data ); + } + } + else { + GSendArr( 0, 0 ); + } + handleVerify(); } void PasswordDlg::gplugSetUser( const TQString & ) { - // ignore ... + // ignore ... } void PasswordDlg::cantCheck() { - greet->failed(); - static_cast< LockProcess* >(parent())->msgBox( TQMessageBox::Critical, - i18n("Cannot unlock the session because the authentication system failed to work;\n" - "you must kill kdesktop_lock (pid %1) manually.").arg(getpid()) ); - greet->revive(); + greet->failed(); + static_cast< LockProcess* >(parent())->msgBox( TQMessageBox::Critical, + i18n("Cannot unlock the session because the authentication system failed to work;\n" + "you must kill kdesktop_lock (pid %1) manually.").arg(getpid()) ); + greet->revive(); } //--------------------------------------------------------------------------- @@ -571,330 +644,384 @@ void PasswordDlg::cantCheck() // void PasswordDlg::gplugStart() { - int sfd[2]; - char fdbuf[16]; - - if (::socketpair(AF_LOCAL, SOCK_STREAM, 0, sfd)) { - cantCheck(); - return; - } - if ((sPid = ::fork()) < 0) { - ::close(sfd[0]); - ::close(sfd[1]); - cantCheck(); - return; - } - if (!sPid) { - ::close(sfd[0]); - sprintf(fdbuf, "%d", sfd[1]); - execlp("kcheckpass", "kcheckpass", + int sfd[2]; + char fdbuf[16]; + + if (::socketpair(AF_LOCAL, SOCK_STREAM, 0, sfd)) { + cantCheck(); + return; + } + if ((sPid = ::fork()) < 0) { + ::close(sfd[0]); + ::close(sfd[1]); + cantCheck(); + return; + } + if (!sPid) { + ::close(sfd[0]); + sprintf(fdbuf, "%d", sfd[1]); + execlp("kcheckpass", "kcheckpass", #ifdef HAVE_PAM - "-c", TDESCREENSAVER_PAM_SERVICE, + "-c", TDESCREENSAVER_PAM_SERVICE, #endif - "-m", mPlugin->info->method, - "-S", fdbuf, - (char *)0); - exit(20); - } - ::close(sfd[1]); - sFd = sfd[0]; - handleVerify(); + "-m", mPlugin->info->method, + "-S", fdbuf, + (char *)0); + exit(20); + } + ::close(sfd[1]); + sFd = sfd[0]; + handleVerify(); } void PasswordDlg::gplugActivity() { - slotActivity(); + slotActivity(); } void PasswordDlg::gplugMsgBox( TQMessageBox::Icon type, const TQString &text ) { - TQDialog dialog( this, 0, true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM)) ); - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), dialog.winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - dialog.setCaption(i18n("Authentication Subsystem Notice")); - TQFrame *winFrame = new TQFrame( &dialog ); - if (trinity_desktop_lock_use_system_modal_dialogs) - winFrame->setFrameStyle( TQFrame::NoFrame ); - else - winFrame->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised ); - winFrame->setLineWidth( 2 ); - TQVBoxLayout *vbox = new TQVBoxLayout( &dialog ); - vbox->addWidget( winFrame ); - - TQLabel *label1 = new TQLabel( winFrame ); - label1->setPixmap( TQMessageBox::standardIcon( type ) ); - TQLabel *label2 = new TQLabel( text, winFrame ); - KPushButton *button = new KPushButton( KStdGuiItem::ok(), winFrame ); - button->setDefault( true ); - button->setSizePolicy( TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred ) ); - connect( button, TQT_SIGNAL( clicked() ), TQT_SLOT( accept() ) ); - - TQGridLayout *grid = new TQGridLayout( winFrame, 2, 2, 10 ); - grid->addWidget( label1, 0, 0, Qt::AlignCenter ); - grid->addWidget( label2, 0, 1, Qt::AlignCenter ); - grid->addMultiCellWidget( button, 1,1, 0,1, Qt::AlignCenter ); - - static_cast< LockProcess* >(parent())->execDialog( &dialog ); + TQDialog dialog( this, 0, true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM)) ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), dialog.winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + dialog.setCaption(i18n("Authentication Subsystem Notice")); + TQFrame *winFrame = new TQFrame( &dialog ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + winFrame->setFrameStyle( TQFrame::NoFrame ); + } + else { + winFrame->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised ); + } + winFrame->setLineWidth( 2 ); + TQVBoxLayout *vbox = new TQVBoxLayout( &dialog ); + vbox->addWidget( winFrame ); + + TQLabel *label1 = new TQLabel( winFrame ); + label1->setPixmap( TQMessageBox::standardIcon( type ) ); + TQLabel *label2 = new TQLabel( text, winFrame ); + KPushButton *button = new KPushButton( KStdGuiItem::ok(), winFrame ); + button->setDefault( true ); + button->setSizePolicy( TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred ) ); + connect( button, TQT_SIGNAL( clicked() ), TQT_SLOT( accept() ) ); + + TQGridLayout *grid = new TQGridLayout( winFrame, 2, 2, 10 ); + grid->addWidget( label1, 0, 0, Qt::AlignCenter ); + grid->addWidget( label2, 0, 1, Qt::AlignCenter ); + grid->addMultiCellWidget( button, 1,1, 0,1, Qt::AlignCenter ); + + static_cast< LockProcess* >(parent())->execDialog( &dialog ); } void PasswordDlg::slotOK() { - greet->next(); + greet->next(); } void PasswordDlg::show() { - TQDialog::show(); - TQApplication::flushX(); - setFixedSize( sizeHint() ); + TQDialog::show(); + TQApplication::flushX(); + setFixedSize( sizeHint() ); } void PasswordDlg::slotStartNewSession() { - if (!KMessageBox::shouldBeShownContinue( ":confirmNewSession" )) { - DM().startReserve(); - return; - } - - killTimer(mTimeoutTimerId); - mTimeoutTimerId = 0; - - TQDialog *dialog = new TQDialog( this, "warnbox", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))); - - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), dialog->winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - dialog->setCaption(i18n("New Session")); - - TQFrame *winFrame = new TQFrame( dialog ); - if (trinity_desktop_lock_use_system_modal_dialogs) - winFrame->setFrameStyle( TQFrame::NoFrame ); - else - winFrame->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised ); - winFrame->setLineWidth( 2 ); - TQVBoxLayout *vbox = new TQVBoxLayout( dialog ); - vbox->addWidget( winFrame ); - - TQLabel *label1 = new TQLabel( winFrame ); - label1->setPixmap( TQMessageBox::standardIcon( TQMessageBox::Warning ) ); - TQString qt_text = - i18n("You have chosen to open another desktop session " - "instead of resuming the current one.<br>" - "The current session will be hidden " - "and a new login screen will be displayed.<br>" - "An F-key is assigned to each session; " - "F%1 is usually assigned to the first session, " - "F%2 to the second session and so on. " - "You can switch between sessions by pressing " - "Ctrl, Alt and the appropriate F-key at the same time. " - "Additionally, the TDE Panel and Desktop menus have " - "actions for switching between sessions.") - .arg(7).arg(8); - TQLabel *label2 = new TQLabel( qt_text, winFrame ); - KPushButton *okbutton = new KPushButton( KGuiItem(i18n("&Start New Session"), "fork"), winFrame ); - okbutton->setDefault( true ); - connect( okbutton, TQT_SIGNAL( clicked() ), dialog, TQT_SLOT( accept() ) ); - KPushButton *cbutton = new KPushButton( KStdGuiItem::cancel(), winFrame ); - connect( cbutton, TQT_SIGNAL( clicked() ), dialog, TQT_SLOT( reject() ) ); - - TQBoxLayout *mbox = new TQVBoxLayout( winFrame, KDialog::marginHint(), KDialog::spacingHint() ); - - TQGridLayout *grid = new TQGridLayout( mbox, 2, 2, 2 * KDialog::spacingHint() ); - grid->setMargin( KDialog::marginHint() ); - grid->addWidget( label1, 0, 0, Qt::AlignCenter ); - grid->addWidget( label2, 0, 1, Qt::AlignCenter ); - TQCheckBox *cb = new TQCheckBox( i18n("&Do not ask again"), winFrame ); - grid->addMultiCellWidget( cb, 1,1, 0,1 ); - - TQBoxLayout *hbox = new TQHBoxLayout( mbox, KDialog::spacingHint() ); - hbox->addStretch( 1 ); - hbox->addWidget( okbutton ); - hbox->addStretch( 1 ); - hbox->addWidget( cbutton ); - hbox->addStretch( 1 ); - - // stolen from kmessagebox - int pref_width = 0; - int pref_height = 0; - // Calculate a proper size for the text. - { - TQSimpleRichText rt(qt_text, dialog->font()); - TQRect rect = TDEGlobalSettings::desktopGeometry(dialog); - - pref_width = rect.width() / 3; - rt.setWidth(pref_width); - int used_width = rt.widthUsed(); - pref_height = rt.height(); - if (used_width <= pref_width) - { - while(true) - { - int new_width = (used_width * 9) / 10; - rt.setWidth(new_width); - int new_height = rt.height(); - if (new_height > pref_height) - break; - used_width = rt.widthUsed(); - if (used_width > new_width) - break; - } - pref_width = used_width; - } - else - { - if (used_width > (pref_width *2)) - pref_width = pref_width *2; - else - pref_width = used_width; - } - } - label2->setFixedSize(TQSize(pref_width+10, pref_height)); - - int ret = static_cast< LockProcess* >( parent())->execDialog( dialog ); - - delete dialog; - - if (ret == TQDialog::Accepted) { - if (cb->isChecked()) - KMessageBox::saveDontShowAgainContinue( ":confirmNewSession" ); - DM().startReserve(); - } - - mTimeoutTimerId = startTimer(PASSDLG_HIDE_TIMEOUT); + if (!KMessageBox::shouldBeShownContinue( ":confirmNewSession" )) { + DM().startReserve(); + return; + } + + killTimer(mTimeoutTimerId); + mTimeoutTimerId = 0; + + TQDialog *dialog = new TQDialog( this, "warnbox", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))); + + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), dialog->winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + dialog->setCaption(i18n("New Session")); + + TQFrame *winFrame = new TQFrame( dialog ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + winFrame->setFrameStyle( TQFrame::NoFrame ); + } + else { + winFrame->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised ); + } + winFrame->setLineWidth( 2 ); + TQVBoxLayout *vbox = new TQVBoxLayout( dialog ); + vbox->addWidget( winFrame ); + + TQLabel *label1 = new TQLabel( winFrame ); + label1->setPixmap( TQMessageBox::standardIcon( TQMessageBox::Warning ) ); + TQString qt_text = i18n("You have chosen to open another desktop session " + "instead of resuming the current one.<br>" + "The current session will be hidden " + "and a new login screen will be displayed.<br>" + "An F-key is assigned to each session; " + "F%1 is usually assigned to the first session, " + "F%2 to the second session and so on. " + "You can switch between sessions by pressing " + "Ctrl, Alt and the appropriate F-key at the same time. " + "Additionally, the TDE Panel and Desktop menus have " + "actions for switching between sessions.") + .arg(7).arg(8); + TQLabel *label2 = new TQLabel( qt_text, winFrame ); + KPushButton *okbutton = new KPushButton( KGuiItem(i18n("&Start New Session"), "fork"), winFrame ); + okbutton->setDefault( true ); + connect( okbutton, TQT_SIGNAL( clicked() ), dialog, TQT_SLOT( accept() ) ); + KPushButton *cbutton = new KPushButton( KStdGuiItem::cancel(), winFrame ); + connect( cbutton, TQT_SIGNAL( clicked() ), dialog, TQT_SLOT( reject() ) ); + + TQBoxLayout *mbox = new TQVBoxLayout( winFrame, KDialog::marginHint(), KDialog::spacingHint() ); + + TQGridLayout *grid = new TQGridLayout( mbox, 2, 2, 2 * KDialog::spacingHint() ); + grid->setMargin( KDialog::marginHint() ); + grid->addWidget( label1, 0, 0, Qt::AlignCenter ); + grid->addWidget( label2, 0, 1, Qt::AlignCenter ); + TQCheckBox *cb = new TQCheckBox( i18n("&Do not ask again"), winFrame ); + grid->addMultiCellWidget( cb, 1,1, 0,1 ); + + TQBoxLayout *hbox = new TQHBoxLayout( mbox, KDialog::spacingHint() ); + hbox->addStretch( 1 ); + hbox->addWidget( okbutton ); + hbox->addStretch( 1 ); + hbox->addWidget( cbutton ); + hbox->addStretch( 1 ); + + // stolen from kmessagebox + int pref_width = 0; + int pref_height = 0; + // Calculate a proper size for the text. + { + TQSimpleRichText rt(qt_text, dialog->font()); + TQRect rect = TDEGlobalSettings::desktopGeometry(dialog); + + pref_width = rect.width() / 3; + rt.setWidth(pref_width); + int used_width = rt.widthUsed(); + pref_height = rt.height(); + if (used_width <= pref_width) { + while(true) { + int new_width = (used_width * 9) / 10; + rt.setWidth(new_width); + int new_height = rt.height(); + if (new_height > pref_height) { + break; + } + used_width = rt.widthUsed(); + if (used_width > new_width) { + break; + } + } + pref_width = used_width; + } + else { + if (used_width > (pref_width *2)) + pref_width = pref_width *2; + else + pref_width = used_width; + } + } + label2->setFixedSize(TQSize(pref_width+10, pref_height)); + + int ret = static_cast< LockProcess* >( parent())->execDialog( dialog ); + + delete dialog; + + if (ret == TQDialog::Accepted) { + if (cb->isChecked()) { + KMessageBox::saveDontShowAgainContinue( ":confirmNewSession" ); + } + DM().startReserve(); + } + + mTimeoutTimerId = startTimer(PASSDLG_HIDE_TIMEOUT); } class LockListViewItem : public TQListViewItem { -public: - LockListViewItem( TQListView *parent, - const TQString &sess, const TQString &loc, int _vt ) - : TQListViewItem( parent ) - , vt( _vt ) - { - setText( 0, sess ); - setText( 1, loc ); - } - - int vt; + public: + LockListViewItem( TQListView *parent, const TQString &sess, const TQString &loc, int _vt ) : TQListViewItem( parent ) + , vt( _vt ) + { + setText( 0, sess ); + setText( 1, loc ); + } + + int vt; }; void PasswordDlg::slotSwitchUser() { - int p = 0; - DM dm; - - TQDialog dialog( this, "sessbox", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM)) ); - - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), dialog.winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - dialog.setCaption(i18n("Switch User")); - - TQFrame *winFrame = new TQFrame( &dialog ); - if (trinity_desktop_lock_use_system_modal_dialogs) - winFrame->setFrameStyle( TQFrame::NoFrame ); - else - winFrame->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised ); - winFrame->setLineWidth( 2 ); - TQBoxLayout *vbox = new TQVBoxLayout( &dialog ); - vbox->addWidget( winFrame ); - - TQBoxLayout *hbox = new TQHBoxLayout( winFrame, KDialog::marginHint(), KDialog::spacingHint() ); - - TQBoxLayout *vbox1 = new TQVBoxLayout( hbox, KDialog::spacingHint() ); - TQBoxLayout *vbox2 = new TQVBoxLayout( hbox, KDialog::spacingHint() ); - - KPushButton *btn; - - SessList sess; - if (dm.localSessions( sess )) { - - lv = new TQListView( winFrame ); - connect( lv, TQT_SIGNAL(doubleClicked(TQListViewItem *, const TQPoint&, int)), TQT_SLOT(slotSessionActivated()) ); - connect( lv, TQT_SIGNAL(doubleClicked(TQListViewItem *, const TQPoint&, int)), &dialog, TQT_SLOT(accept()) ); - lv->setAllColumnsShowFocus( true ); - lv->addColumn( i18n("Session") ); - lv->addColumn( i18n("Location") ); - lv->setColumnWidthMode( 0, TQListView::Maximum ); - lv->setColumnWidthMode( 1, TQListView::Maximum ); - TQListViewItem *itm = 0; - TQString user, loc; - int ns = 0; - for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { - DM::sess2Str2( *it, user, loc ); - itm = new LockListViewItem( lv, user, loc, (*it).vt ); - if (!(*it).vt) - itm->setEnabled( false ); - if ((*it).self) { - lv->setCurrentItem( itm ); - itm->setSelected( true ); - } - ns++; - } - int fw = lv->frameWidth() * 2; - TQSize hds( lv->header()->sizeHint() ); - lv->setMinimumWidth( fw + hds.width() + - (ns > 10 ? style().pixelMetric(TQStyle::PM_ScrollBarExtent) : 0 ) ); - lv->setFixedHeight( fw + hds.height() + - itm->height() * (ns < 6 ? 6 : ns > 10 ? 10 : ns) ); - lv->header()->adjustHeaderSize(); - vbox1->addWidget( lv ); - - btn = new KPushButton( KGuiItem(i18n("session", "&Activate"), "fork"), winFrame ); - connect( btn, TQT_SIGNAL(clicked()), TQT_SLOT(slotSessionActivated()) ); - connect( btn, TQT_SIGNAL(clicked()), &dialog, TQT_SLOT(accept()) ); - vbox2->addWidget( btn ); - vbox2->addStretch( 2 ); - } - - if (kapp->authorize("start_new_session") && (p = dm.numReserve()) >= 0) - { - btn = new KPushButton( KGuiItem(i18n("Start &New Session"), "fork"), winFrame ); - connect( btn, TQT_SIGNAL(clicked()), TQT_SLOT(slotStartNewSession()) ); - connect( btn, TQT_SIGNAL(clicked()), &dialog, TQT_SLOT(accept()) ); - if (!p) - btn->setEnabled( false ); - vbox2->addWidget( btn ); - vbox2->addStretch( 1 ); - } - - btn = new KPushButton( KStdGuiItem::cancel(), winFrame ); - connect( btn, TQT_SIGNAL(clicked()), &dialog, TQT_SLOT(reject()) ); - vbox2->addWidget( btn ); - - dialog.setFixedSize( dialog.sizeHint() ); - - int ret = static_cast< LockProcess* >(parent())->execDialog( &dialog ); - if (ret != TQDialog::Rejected) { - TQDialog::reject(); - } + int p = 0; + DM dm; + + TQDialog dialog( this, "sessbox", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM)) ); + + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), dialog.winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + dialog.setCaption(i18n("Switch User")); + + TQFrame *winFrame = new TQFrame( &dialog ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + winFrame->setFrameStyle( TQFrame::NoFrame ); + } + else { + winFrame->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised ); + } + winFrame->setLineWidth( 2 ); + TQBoxLayout *vbox = new TQVBoxLayout( &dialog ); + vbox->addWidget( winFrame ); + + TQBoxLayout *hbox = new TQHBoxLayout( winFrame, KDialog::marginHint(), KDialog::spacingHint() ); + + TQBoxLayout *vbox1 = new TQVBoxLayout( hbox, KDialog::spacingHint() ); + TQBoxLayout *vbox2 = new TQVBoxLayout( hbox, KDialog::spacingHint() ); + + KPushButton *btn; + + SessList sess; + if (dm.localSessions( sess )) { + lv = new TQListView( winFrame ); + connect( lv, TQT_SIGNAL(doubleClicked(TQListViewItem *, const TQPoint&, int)), TQT_SLOT(slotSessionActivated()) ); + connect( lv, TQT_SIGNAL(doubleClicked(TQListViewItem *, const TQPoint&, int)), &dialog, TQT_SLOT(accept()) ); + lv->setAllColumnsShowFocus( true ); + lv->addColumn( i18n("Session") ); + lv->addColumn( i18n("Location") ); + lv->setColumnWidthMode( 0, TQListView::Maximum ); + lv->setColumnWidthMode( 1, TQListView::Maximum ); + TQListViewItem *itm = 0; + TQString user, loc; + int ns = 0; + for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + DM::sess2Str2( *it, user, loc ); + itm = new LockListViewItem( lv, user, loc, (*it).vt ); + if (!(*it).vt) { + itm->setEnabled( false ); + } + if ((*it).self) { + lv->setCurrentItem( itm ); + itm->setSelected( true ); + } + ns++; + } + int fw = lv->frameWidth() * 2; + TQSize hds( lv->header()->sizeHint() ); + lv->setMinimumWidth( fw + hds.width() + + (ns > 10 ? style().pixelMetric(TQStyle::PM_ScrollBarExtent) : 0 ) ); + lv->setFixedHeight( fw + hds.height() + + itm->height() * (ns < 6 ? 6 : ns > 10 ? 10 : ns) ); + lv->header()->adjustHeaderSize(); + vbox1->addWidget( lv ); + + btn = new KPushButton( KGuiItem(i18n("session", "&Activate"), "fork"), winFrame ); + connect( btn, TQT_SIGNAL(clicked()), TQT_SLOT(slotSessionActivated()) ); + connect( btn, TQT_SIGNAL(clicked()), &dialog, TQT_SLOT(accept()) ); + vbox2->addWidget( btn ); + vbox2->addStretch( 2 ); + } + + if (kapp->authorize("start_new_session") && (p = dm.numReserve()) >= 0) { + btn = new KPushButton( KGuiItem(i18n("Start &New Session"), "fork"), winFrame ); + connect( btn, TQT_SIGNAL(clicked()), TQT_SLOT(slotStartNewSession()) ); + connect( btn, TQT_SIGNAL(clicked()), &dialog, TQT_SLOT(accept()) ); + if (!p) + btn->setEnabled( false ); + vbox2->addWidget( btn ); + vbox2->addStretch( 1 ); + } + + btn = new KPushButton( KStdGuiItem::cancel(), winFrame ); + connect( btn, TQT_SIGNAL(clicked()), &dialog, TQT_SLOT(reject()) ); + vbox2->addWidget( btn ); + + dialog.setFixedSize( dialog.sizeHint() ); + + int ret = static_cast< LockProcess* >(parent())->execDialog( &dialog ); + if (ret != TQDialog::Rejected) { + TQDialog::reject(); + } } void PasswordDlg::slotSessionActivated() { - LockListViewItem *itm = (LockListViewItem *)lv->currentItem(); - if (itm && itm->vt > 0) - DM().switchVT( itm->vt ); + LockListViewItem *itm = (LockListViewItem *)lv->currentItem(); + if (itm && itm->vt > 0) { + DM().switchVT( itm->vt ); + } } void PasswordDlg::capsLocked() { - unsigned int lmask; - Window dummy1, dummy2; - int dummy3, dummy4, dummy5, dummy6; - XQueryPointer(tqt_xdisplay(), DefaultRootWindow( tqt_xdisplay() ), &dummy1, &dummy2, &dummy3, &dummy4, &dummy5, &dummy6, &lmask); - mCapsLocked = lmask & LockMask; - updateLabel(); + unsigned int lmask; + Window dummy1, dummy2; + int dummy3, dummy4, dummy5, dummy6; + XQueryPointer(tqt_xdisplay(), DefaultRootWindow( tqt_xdisplay() ), &dummy1, &dummy2, &dummy3, &dummy4, &dummy5, &dummy6, &lmask); + mCapsLocked = lmask & LockMask; + updateLabel(); +} + +void PasswordDlg::attemptCardLogin() { +#ifdef HAVE_KRB5 + // Make sure card logins are enabled before attempting one + if (!LDAPManager::pkcsLoginEnabled()) { + return; + } +#else + // Don't enable card-based logins if Kerberos integration was disabled + return; +#endif + + if (mCardLoginInProgress) { + return; + } + mCardLoginInProgress = true; + + // FIXME + // pam_pkcs11 is extremely chatty with no apparent way to disable the unwanted messages + greet->setInfoMessageDisplay(false); + + validUserCardInserted = true; + greet->setPasswordPrompt(i18n("PIN:")); + + // Force relayout + setFixedSize(sizeHint().width(), sizeHint().height() + 1); + setFixedSize(sizeHint()); + + // Bypass initial password prompt + greet->start(); + greet->setPassword(""); + TQTimer::singleShot(0, this, SLOT(slotOK())); +} + +void PasswordDlg::resetCardLogin() { + validUserCardInserted = false; + greet->abort(); + greet->clear(); + greet->revive(); + greet->start(); + greet->setPasswordPrompt(TQString::null); + + // Force relayout + setFixedSize(sizeHint().width(), sizeHint().height() + 1); + setFixedSize(sizeHint()); + + // Restore information message display settings + greet->setInfoMessageDisplay(showInfoMessages); + + mCardLoginInProgress = false; } #include "lockdlg.moc" diff --git a/kdesktop/lock/lockdlg.h b/kdesktop/lock/lockdlg.h index 2ede5a4fa..571d825fa 100644 --- a/kdesktop/lock/lockdlg.h +++ b/kdesktop/lock/lockdlg.h @@ -1,9 +1,10 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // // Copyright (c) 1999 Martin R. Jones <mjones@kde.org> // Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> // #ifndef __LOCKDLG_H__ @@ -32,69 +33,75 @@ class TQListView; // class PasswordDlg : public TQDialog, public KGreeterPluginHandler { - Q_OBJECT + Q_OBJECT -public: - PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin); - PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin, TQDateTime lockStartDateTime); - ~PasswordDlg(); - void init(GreeterPluginHandle *plugin); - virtual void show(); + public: + PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin); + PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin, TQDateTime lockStartDateTime); + ~PasswordDlg(); + void init(GreeterPluginHandle *plugin); + virtual void show(); + + // from KGreetPluginHandler + virtual void gplugReturnText( const char *text, int tag ); + virtual void gplugReturnBinary( const char *data ); + virtual void gplugSetUser( const TQString & ); + virtual void gplugStart(); + virtual void gplugActivity(); + virtual void gplugMsgBox( TQMessageBox::Icon type, const TQString &text ); - // from KGreetPluginHandler - virtual void gplugReturnText( const char *text, int tag ); - virtual void gplugReturnBinary( const char *data ); - virtual void gplugSetUser( const TQString & ); - virtual void gplugStart(); - virtual void gplugActivity(); - virtual void gplugMsgBox( TQMessageBox::Icon type, const TQString &text ); - -protected: - virtual void timerEvent(TQTimerEvent *); - virtual bool eventFilter(TQObject *, TQEvent *); - -private slots: - void slotSwitchUser(); - void slotSessionActivated(); - void slotStartNewSession(); - void slotOK(); - void layoutClicked(); - void slotActivity(); - -protected slots: - virtual void reject(); - -private: - void setLayoutText( const TQString &txt ); - void capsLocked(); - void updateLabel(); - int Reader (void *buf, int count); - bool GRead (void *buf, int count); - bool GWrite (const void *buf, int count); - bool GSendInt (int val); - bool GSendStr (const char *buf); - bool GSendArr (int len, const char *buf); - bool GRecvInt (int *val); - bool GRecvArr (char **buf); - void handleVerify(); - void reapVerify(); - void cantCheck(); - GreeterPluginHandle *mPlugin; - KGreeterPlugin *greet; - TQFrame *frame; - TQGridLayout *frameLayout; - TQLabel *mStatusLabel; - KPushButton *mNewSessButton, *ok, *cancel; - TQPushButton *mLayoutButton; - int mFailedTimerId; - int mTimeoutTimerId; - int mCapsLocked; - bool mUnlockingFailed; - TQStringList layoutsList; - TQStringList::iterator currLayout; - int sPid, sFd; - TQListView *lv; - TQDateTime m_lockStartDT; + virtual void attemptCardLogin(); + virtual void resetCardLogin(); + + protected: + virtual void timerEvent(TQTimerEvent *); + virtual bool eventFilter(TQObject *, TQEvent *); + + private slots: + void slotSwitchUser(); + void slotSessionActivated(); + void slotStartNewSession(); + void slotOK(); + void layoutClicked(); + void slotActivity(); + + protected slots: + virtual void reject(); + + private: + void setLayoutText( const TQString &txt ); + void capsLocked(); + void updateLabel(); + int Reader (void *buf, int count); + bool GRead (void *buf, int count); + bool GWrite (const void *buf, int count); + bool GSendInt (int val); + bool GSendStr (const char *buf); + bool GSendArr (int len, const char *buf); + bool GRecvInt (int *val); + bool GRecvArr (char **buf); + void handleVerify(); + void reapVerify(); + void cantCheck(); + GreeterPluginHandle *mPlugin; + KGreeterPlugin *greet; + TQFrame *frame; + TQGridLayout *frameLayout; + TQLabel *mStatusLabel; + KPushButton *mNewSessButton, *ok, *cancel; + TQPushButton *mLayoutButton; + int mFailedTimerId; + int mTimeoutTimerId; + int mCapsLocked; + bool mUnlockingFailed; + bool validUserCardInserted; + bool showInfoMessages; + TQStringList layoutsList; + TQStringList::iterator currLayout; + int sPid, sFd; + TQListView *lv; + bool mCardLoginInProgress; + TQDateTime m_lockStartDT; }; #endif diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc index bfafa371b..0a7f86366 100644 --- a/kdesktop/lock/lockprocess.cc +++ b/kdesktop/lock/lockprocess.cc @@ -1,10 +1,10 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // // Copyright (c) 1999 Martin R. Jones <mjones@kde.org> // Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org> -// Copyright (c) 2010-2013 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> // //kdesktop keeps running and checks user inactivity @@ -34,6 +34,7 @@ #include <tdeapplication.h> #include <kservicegroup.h> #include <kdebug.h> +#include <kuser.h> #include <tdemessagebox.h> #include <tdeglobalsettings.h> #include <tdelocale.h> @@ -112,6 +113,8 @@ Status DPMSInfo ( Display *, CARD16 *, BOOL * ); #include <GL/glx.h> #endif +#define KDESKTOP_DEBUG_ID 1204 + #define LOCK_GRACE_DEFAULT 5000 #define AUTOLOGOUT_DEFAULT 600 @@ -146,7 +149,7 @@ Atom kde_wm_transparent_to_black = 0; static void segv_handler(int) { - kdError(1204) << "A fatal exception was encountered." + kdError(KDESKTOP_DEBUG_ID) << "A fatal exception was encountered." << " Trapping and ignoring it so as not to compromise desktop security..." << kdBacktrace() << endl; sleep(1); @@ -185,118 +188,132 @@ mHackDelayStartupTimer->stop(); // starting screensaver hacks, and password entry. // LockProcess::LockProcess() - : TQWidget(0L, "saver window", ((WFlags)(WStyle_StaysOnTop|WStyle_Customize|WStyle_NoBorder))), - mOpenGLVisual(0), - mParent(0), - mShowLockDateTime(false), - mSuspended(false), - mVisibility(false), - mRestoreXF86Lock(false), - mForbidden(false), - mAutoLogout(false), - resizeTimer(NULL), - hackResumeTimer(NULL), - mVkbdProcess(NULL), - mKWinModule(NULL), - mPipeOpen(false), - mPipeOpen_out(false), - mInfoMessageDisplayed(false), - mDialogControlLock(false), - mForceReject(false), - currentDialog(NULL), - mEnsureScreenHiddenTimer(NULL), - mForceContinualLockDisplayTimer(NULL), - mEnsureVRootWindowSecurityTimer(NULL), - mHackDelayStartupTimer(NULL), - mHackDelayStartupTimeout(0), - mHackStartupEnabled(true), - mOverrideHackStartupEnabled(false), - mResizingDesktopLock(false), - mFullyOnlineSent(false), - mClosingWindows(false), - mInSecureDialog(false), - mHackActive(false), - m_rootPixmap(NULL), - mBackingStartupDelayTimer(0), - m_startupStatusDialog(NULL), - m_mouseDown(0), - m_mousePrevX(0), - m_mousePrevY(0), - m_dialogPrevX(0), - m_dialogPrevY(0), - m_notifyReadyRequested(false), - m_maskWidget(NULL), - m_saverRootWindow(0) + : TQWidget(0L, "saver window", ((WFlags)(WStyle_StaysOnTop|WStyle_Customize|WStyle_NoBorder))), + mOpenGLVisual(0), + mParent(0), + mShowLockDateTime(false), + mSuspended(false), + mVisibility(false), + mRestoreXF86Lock(false), + mForbidden(false), + mAutoLogout(false), + resizeTimer(NULL), + hackResumeTimer(NULL), + mVkbdProcess(NULL), + mKWinModule(NULL), + mPipeOpen(false), + mPipeOpen_out(false), + mInfoMessageDisplayed(false), + mDialogControlLock(false), + mForceReject(false), + currentDialog(NULL), + mEnsureScreenHiddenTimer(NULL), + mForceContinualLockDisplayTimer(NULL), + mEnsureVRootWindowSecurityTimer(NULL), + mHackDelayStartupTimer(NULL), + mHackDelayStartupTimeout(0), + mHackStartupEnabled(true), + mOverrideHackStartupEnabled(false), + mResizingDesktopLock(false), + mFullyOnlineSent(false), + mClosingWindows(false), + mInSecureDialog(false), + mHackActive(false), + m_rootPixmap(NULL), + mBackingStartupDelayTimer(0), + m_startupStatusDialog(NULL), + m_mouseDown(0), + m_mousePrevX(0), + m_mousePrevY(0), + m_dialogPrevX(0), + m_dialogPrevY(0), + m_notifyReadyRequested(false), + m_loginCardDevice(NULL), + m_maskWidget(NULL), + m_saverRootWindow(0) { #ifdef KEEP_MOUSE_UNGRABBED - setNFlags(WX11DisableMove|WX11DisableClose|WX11DisableShade|WX11DisableMinimize|WX11DisableMaximize); + setNFlags(WX11DisableMove|WX11DisableClose|WX11DisableShade|WX11DisableMinimize|WX11DisableMaximize); #endif - setupSignals(); - - // Set up atoms - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - kde_wm_transparent_to_desktop = XInternAtom(tqt_xdisplay(), "_TDE_TRANSPARENT_TO_DESKTOP", False); - kde_wm_transparent_to_black = XInternAtom(tqt_xdisplay(), "_TDE_TRANSPARENT_TO_BLACK", False); - - kapp->installX11EventFilter(this); - - mForceContinualLockDisplayTimer = new TQTimer( this ); - mHackDelayStartupTimer = new TQTimer( this ); - mEnsureVRootWindowSecurityTimer = new TQTimer( this ); - - if (!argb_visual) { - // Try to get the root pixmap - if (!m_rootPixmap) m_rootPixmap = new KRootPixmap(this); - connect(m_rootPixmap, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)), this, TQT_SLOT(slotPaintBackground(const TQPixmap &))); - m_rootPixmap->setCustomPainting(true); - m_rootPixmap->start(); - } - - // Get root window attributes - XWindowAttributes rootAttr; - XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr); - { // trigger creation of QToolTipManager, it does XSelectInput() on the root window - TQWidget w; - TQToolTip::add( &w, "foo" ); - } - XSelectInput( tqt_xdisplay(), tqt_xrootwin(), SubstructureNotifyMask | rootAttr.your_event_mask ); - - // Add non-TDE path - TDEGlobal::dirs()->addResourceType("scrsav", - TDEGlobal::dirs()->kde_default("apps") + - "System/ScreenSavers/"); - - // Add KDE specific screensaver path - TQString relPath="System/ScreenSavers/"; - KServiceGroup::Ptr servGroup = KServiceGroup::baseGroup( "screensavers"); - if (servGroup) - { - relPath=servGroup->relPath(); - kdDebug(1204) << "relPath=" << relPath << endl; - } - TDEGlobal::dirs()->addResourceType("scrsav", - TDEGlobal::dirs()->kde_default("apps") + - relPath); - - // virtual root property - gXA_VROOT = XInternAtom (tqt_xdisplay(), "__SWM_VROOT", False); - gXA_SCREENSAVER_VERSION = XInternAtom (tqt_xdisplay(), "_SCREENSAVER_VERSION", False); - - TQStringList dmopt = - TQStringList::split(TQChar(','), - TQString::fromLatin1( ::getenv( "XDM_MANAGED" ))); - for (TQStringList::ConstIterator it = dmopt.begin(); it != dmopt.end(); ++it) - if ((*it).startsWith("method=")) - mMethod = (*it).mid(7); + setupSignals(); + + // Set up atoms + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + kde_wm_transparent_to_desktop = XInternAtom(tqt_xdisplay(), "_TDE_TRANSPARENT_TO_DESKTOP", False); + kde_wm_transparent_to_black = XInternAtom(tqt_xdisplay(), "_TDE_TRANSPARENT_TO_BLACK", False); + + kapp->installX11EventFilter(this); + + mForceContinualLockDisplayTimer = new TQTimer( this ); + mHackDelayStartupTimer = new TQTimer( this ); + mEnsureVRootWindowSecurityTimer = new TQTimer( this ); + + if (!argb_visual) { + // Try to get the root pixmap + if (!m_rootPixmap) m_rootPixmap = new KRootPixmap(this); + connect(m_rootPixmap, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)), this, TQT_SLOT(slotPaintBackground(const TQPixmap &))); + m_rootPixmap->setCustomPainting(true); + m_rootPixmap->start(); + } + + // Get root window attributes + XWindowAttributes rootAttr; + XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr); + { // trigger creation of QToolTipManager, it does XSelectInput() on the root window + TQWidget w; + TQToolTip::add( &w, "foo" ); + } + XSelectInput( tqt_xdisplay(), tqt_xrootwin(), SubstructureNotifyMask | rootAttr.your_event_mask ); + + // Add non-TDE path + TDEGlobal::dirs()->addResourceType("scrsav", + TDEGlobal::dirs()->kde_default("apps") + + "System/ScreenSavers/"); + + // Add KDE specific screensaver path + TQString relPath="System/ScreenSavers/"; + KServiceGroup::Ptr servGroup = KServiceGroup::baseGroup( "screensavers"); + if (servGroup) { + relPath=servGroup->relPath(); + kdDebug(KDESKTOP_DEBUG_ID) << "relPath=" << relPath << endl; + } + TDEGlobal::dirs()->addResourceType("scrsav", + TDEGlobal::dirs()->kde_default("apps") + + relPath); + + // virtual root property + gXA_VROOT = XInternAtom (tqt_xdisplay(), "__SWM_VROOT", False); + gXA_SCREENSAVER_VERSION = XInternAtom (tqt_xdisplay(), "_SCREENSAVER_VERSION", False); + + TQStringList dmopt = TQStringList::split(TQChar(','), + TQString::fromLatin1( ::getenv( "XDM_MANAGED" ))); + for (TQStringList::ConstIterator it = dmopt.begin(); it != dmopt.end(); ++it) { + if ((*it).startsWith("method=")) { + mMethod = (*it).mid(7); + } + } + + // Initialize SmartCard readers + TDEGenericDevice *hwdevice; + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard); + for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + // connect(cdevice, SIGNAL(pinRequested(TQString,TDECryptographicCardDevice*)), this, SLOT(cryptographicCardPinRequested(TQString,TDECryptographicCardDevice*))); + connect(cdevice, TQT_SIGNAL(certificateListAvailable(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardInserted(TDECryptographicCardDevice*))); + connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardRemoved(TDECryptographicCardDevice*))); + cdevice->enableCardMonitoring(true); + // cdevice->enablePINEntryCallbacks(true); + } #ifdef KEEP_MOUSE_UNGRABBED - setEnabled(false); + setEnabled(false); #endif - greetPlugin.library = 0; + greetPlugin.library = 0; - TDECrash::setCrashHandler(segv_handler); + TDECrash::setCrashHandler(segv_handler); } //--------------------------------------------------------------------------- @@ -305,49 +322,49 @@ LockProcess::LockProcess() // LockProcess::~LockProcess() { - mControlPipeHandler->terminateThread(); - mControlPipeHandlerThread->wait(); - delete mControlPipeHandler; -// delete mControlPipeHandlerThread; - - if (resizeTimer != NULL) { - resizeTimer->stop(); - delete resizeTimer; - } - if (hackResumeTimer != NULL) { - hackResumeTimer->stop(); - delete hackResumeTimer; - } - if (mEnsureScreenHiddenTimer != NULL) { - mEnsureScreenHiddenTimer->stop(); - delete mEnsureScreenHiddenTimer; - } - if (mForceContinualLockDisplayTimer != NULL) { - mForceContinualLockDisplayTimer->stop(); - delete mForceContinualLockDisplayTimer; - } - if (mHackDelayStartupTimer != NULL) { - mHackDelayStartupTimer->stop(); - delete mHackDelayStartupTimer; - } - if (mEnsureVRootWindowSecurityTimer != NULL) { - mEnsureVRootWindowSecurityTimer->stop(); - delete mEnsureVRootWindowSecurityTimer; - } - - if (greetPlugin.library) { - if (greetPlugin.info->done) - greetPlugin.info->done(); - greetPlugin.library->unload(); - } - - if (m_rootPixmap) { - m_rootPixmap->stop(); - delete m_rootPixmap; - } - - mPipeOpen = false; - mPipeOpen_out = false; + mControlPipeHandler->terminateThread(); + mControlPipeHandlerThread->wait(); + delete mControlPipeHandler; +// delete mControlPipeHandlerThread; + + if (resizeTimer != NULL) { + resizeTimer->stop(); + delete resizeTimer; + } + if (hackResumeTimer != NULL) { + hackResumeTimer->stop(); + delete hackResumeTimer; + } + if (mEnsureScreenHiddenTimer != NULL) { + mEnsureScreenHiddenTimer->stop(); + delete mEnsureScreenHiddenTimer; + } + if (mForceContinualLockDisplayTimer != NULL) { + mForceContinualLockDisplayTimer->stop(); + delete mForceContinualLockDisplayTimer; + } + if (mHackDelayStartupTimer != NULL) { + mHackDelayStartupTimer->stop(); + delete mHackDelayStartupTimer; + } + if (mEnsureVRootWindowSecurityTimer != NULL) { + mEnsureVRootWindowSecurityTimer->stop(); + delete mEnsureVRootWindowSecurityTimer; + } + + if (greetPlugin.library) { + if (greetPlugin.info->done) + greetPlugin.info->done(); + greetPlugin.library->unload(); + } + + if (m_rootPixmap) { + m_rootPixmap->stop(); + delete m_rootPixmap; + } + + mPipeOpen = false; + mPipeOpen_out = false; } //--------------------------------------------------------------------------- @@ -357,118 +374,117 @@ LockProcess::~LockProcess() // void LockProcess::init(bool child, bool useBlankOnly) { - // Get root window size - XWindowAttributes rootAttr; - XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr); - mRootWidth = rootAttr.width; - mRootHeight = rootAttr.height; - generateBackingImages(); - - // Connect all signals - connect( mForceContinualLockDisplayTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(displayLockDialogIfNeeded()) ); - connect( mHackDelayStartupTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(closeDialogAndStartHack()) ); - connect( mEnsureVRootWindowSecurityTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(repaintRootWindowIfNeeded()) ); - connect(tqApp, TQT_SIGNAL(mouseInteraction(XEvent *)), TQT_SLOT(slotMouseActivity(XEvent *))); - connect(&mHackProc, TQT_SIGNAL(processExited(TDEProcess *)), TQT_SLOT(hackExited(TDEProcess *))); - connect(&mSuspendTimer, TQT_SIGNAL(timeout()), TQT_SLOT(suspend())); + // Get root window size + XWindowAttributes rootAttr; + XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr); + mRootWidth = rootAttr.width; + mRootHeight = rootAttr.height; + generateBackingImages(); + + // Connect all signals + connect( mForceContinualLockDisplayTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(displayLockDialogIfNeeded()) ); + connect( mHackDelayStartupTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(closeDialogAndStartHack()) ); + connect( mEnsureVRootWindowSecurityTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(repaintRootWindowIfNeeded()) ); + connect(tqApp, TQT_SIGNAL(mouseInteraction(XEvent *)), TQT_SLOT(slotMouseActivity(XEvent *))); + connect(&mHackProc, TQT_SIGNAL(processExited(TDEProcess *)), TQT_SLOT(hackExited(TDEProcess *))); + connect(&mSuspendTimer, TQT_SIGNAL(timeout()), TQT_SLOT(suspend())); #ifdef HAVE_DPMS - //if the user decided that the screensaver should run independent from - //dpms, we shouldn't check for it, aleXXX - if (KDesktopSettings::dpmsDependent()) { - BOOL on; - CARD16 state; - if (DPMSInfo(tqt_xdisplay(), &state, &on)) { - if (on) { - connect(&mCheckDPMS, TQT_SIGNAL(timeout()), TQT_SLOT(checkDPMSActive())); - // we can save CPU if we stop it as quickly as possible - // but we waste CPU if we check too often -> so take 10s - mCheckDPMS.start(10000); - } - } - } + //if the user decided that the screensaver should run independent from + //dpms, we shouldn't check for it, aleXXX + if (KDesktopSettings::dpmsDependent()) { + BOOL on; + CARD16 state; + if (DPMSInfo(tqt_xdisplay(), &state, &on)) { + if (on) { + connect(&mCheckDPMS, TQT_SIGNAL(timeout()), TQT_SLOT(checkDPMSActive())); + // we can save CPU if we stop it as quickly as possible + // but we waste CPU if we check too often -> so take 10s + mCheckDPMS.start(10000); + } + } + } #endif #if (TQT_VERSION-0 >= 0x030200) // XRANDR support - connect( kapp->desktop(), TQT_SIGNAL( resized( int )), TQT_SLOT( desktopResized())); + connect( kapp->desktop(), TQT_SIGNAL( resized( int )), TQT_SLOT( desktopResized())); #endif - if (!trinity_desktop_lock_use_system_modal_dialogs) { - setWFlags((WFlags)WX11BypassWM); - } + if (!trinity_desktop_lock_use_system_modal_dialogs) { + setWFlags((WFlags)WX11BypassWM); + } - child_saver = child; - mUseBlankOnly = useBlankOnly; + child_saver = child; + mUseBlankOnly = useBlankOnly; - mShowLockDateTime = KDesktopSettings::showLockDateTime(); - mlockDateTime = TQDateTime::currentDateTime(); + mShowLockDateTime = KDesktopSettings::showLockDateTime(); + mlockDateTime = TQDateTime::currentDateTime(); - mHackDelayStartupTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000; - mHackStartupEnabled = trinity_desktop_lock_use_system_modal_dialogs?KDesktopSettings::screenSaverEnabled():true; + mHackDelayStartupTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000; + mHackStartupEnabled = trinity_desktop_lock_use_system_modal_dialogs?KDesktopSettings::screenSaverEnabled():true; - configure(); + configure(); - mControlPipeHandlerThread = new TQEventLoopThread(); - mControlPipeHandler = new ControlPipeHandlerObject(); - mControlPipeHandler->mParent = this; - mControlPipeHandler->moveToThread(mControlPipeHandlerThread); - TQObject::connect(mControlPipeHandler, SIGNAL(processCommand(TQString)), this, SLOT(processInputPipeCommand(TQString))); - TQTimer::singleShot(0, mControlPipeHandler, SLOT(run())); - mControlPipeHandlerThread->start(); + mControlPipeHandlerThread = new TQEventLoopThread(); + mControlPipeHandler = new ControlPipeHandlerObject(); + mControlPipeHandler->mParent = this; + mControlPipeHandler->moveToThread(mControlPipeHandlerThread); + TQObject::connect(mControlPipeHandler, SIGNAL(processCommand(TQString)), this, SLOT(processInputPipeCommand(TQString))); + TQTimer::singleShot(0, mControlPipeHandler, SLOT(run())); + mControlPipeHandlerThread->start(); } static int signal_pipe[2]; static void sigterm_handler(int) { - if ((!trinity_desktop_lock_process) || (!trinity_desktop_lock_process->inSecureDialog())) { - // Exit uncleanly - char tmp = 'U'; - if (::write( signal_pipe[1], &tmp, 1) == -1) { - // Error handler to shut up gcc warnings - } - } + if ((!trinity_desktop_lock_process) || (!trinity_desktop_lock_process->inSecureDialog())) { + // Exit uncleanly + char tmp = 'U'; + if (::write( signal_pipe[1], &tmp, 1) == -1) { + // Error handler to shut up gcc warnings + } + } } static void sighup_handler(int) { - char tmp = 'H'; - if (::write( signal_pipe[1], &tmp, 1) == -1) { - // Error handler to shut up gcc warnings - } + char tmp = 'H'; + if (::write( signal_pipe[1], &tmp, 1) == -1) { + // Error handler to shut up gcc warnings + } } bool LockProcess::closeCurrentWindow() { - mClosingWindows = TRUE; - if (currentDialog != NULL) { - mForceReject = true; - if (dynamic_cast<SAKDlg*>(currentDialog)) { - dynamic_cast<SAKDlg*>(currentDialog)->closeDialogForced(); - } - else if (dynamic_cast<SecureDlg*>(currentDialog)) { - dynamic_cast<SecureDlg*>(currentDialog)->closeDialogForced(); - } - else { - currentDialog->close(); - } - } - - if( mDialogs.isEmpty() ) { - mClosingWindows = FALSE; - mForceReject = false; - return false; - } - else { - mClosingWindows = TRUE; - return true; - } + mClosingWindows = TRUE; + if (currentDialog != NULL) { + mForceReject = true; + if (dynamic_cast<SAKDlg*>(currentDialog)) { + dynamic_cast<SAKDlg*>(currentDialog)->closeDialogForced(); + } + else if (dynamic_cast<SecureDlg*>(currentDialog)) { + dynamic_cast<SecureDlg*>(currentDialog)->closeDialogForced(); + } + else { + currentDialog->close(); + } + } + + if( mDialogs.isEmpty() ) { + mClosingWindows = FALSE; + mForceReject = false; + return false; + } + else { + mClosingWindows = TRUE; + return true; + } } void LockProcess::timerEvent(TQTimerEvent *ev) { - if (mAutoLogout && ev->timerId() == mAutoLogoutTimerId) - { + if (mAutoLogout && ev->timerId() == mAutoLogoutTimerId) { killTimer(mAutoLogoutTimerId); AutoLogout autologout(this); execDialog(&autologout); @@ -482,58 +498,58 @@ void LockProcess::resizeEvent(TQResizeEvent *) void LockProcess::setupSignals() { - struct sigaction act; - // ignore SIGINT - act.sa_handler=SIG_IGN; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGINT); - act.sa_flags = 0; - sigaction(SIGINT, &act, 0L); - // ignore SIGQUIT - act.sa_handler=SIG_IGN; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGQUIT); - act.sa_flags = 0; - sigaction(SIGQUIT, &act, 0L); - // exit uncleanly on SIGTERM - act.sa_handler= sigterm_handler; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGTERM); - act.sa_flags = 0; - sigaction(SIGTERM, &act, 0L); - // SIGHUP forces lock - act.sa_handler= sighup_handler; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGHUP); - act.sa_flags = 0; - sigaction(SIGHUP, &act, 0L); - - if (pipe(signal_pipe) == -1) { - // Error handler to shut up gcc warnings - } - TQSocketNotifier* notif = new TQSocketNotifier(signal_pipe[0], TQSocketNotifier::Read, TQT_TQOBJECT(this) ); - connect( notif, TQT_SIGNAL(activated(int)), TQT_SLOT(signalPipeSignal())); + struct sigaction act; + // ignore SIGINT + act.sa_handler=SIG_IGN; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGINT); + act.sa_flags = 0; + sigaction(SIGINT, &act, 0L); + // ignore SIGQUIT + act.sa_handler=SIG_IGN; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGQUIT); + act.sa_flags = 0; + sigaction(SIGQUIT, &act, 0L); + // exit uncleanly on SIGTERM + act.sa_handler= sigterm_handler; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGTERM); + act.sa_flags = 0; + sigaction(SIGTERM, &act, 0L); + // SIGHUP forces lock + act.sa_handler= sighup_handler; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGHUP); + act.sa_flags = 0; + sigaction(SIGHUP, &act, 0L); + + if (pipe(signal_pipe) == -1) { + // Error handler to shut up gcc warnings + } + TQSocketNotifier* notif = new TQSocketNotifier(signal_pipe[0], TQSocketNotifier::Read, TQT_TQOBJECT(this) ); + connect( notif, TQT_SIGNAL(activated(int)), TQT_SLOT(signalPipeSignal())); } void LockProcess::signalPipeSignal() { - char tmp; - if (::read( signal_pipe[0], &tmp, 1) == -1) { - // Error handler to shut up gcc warnings - } - if( tmp == 'T' ) { - quitSaver(); - } - else if( tmp == 'H' ) { - if( !mLocked ) - startLock(); - } - else if( tmp == 'U' ) { - // Exit uncleanly - quitSaver(); - exit(1); - } + char tmp; + if (::read( signal_pipe[0], &tmp, 1) == -1) { + // Error handler to shut up gcc warnings + } + if( tmp == 'T' ) { + quitSaver(); + } + else if( tmp == 'H' ) { + if( !mLocked ) + startLock(); + } + else if( tmp == 'U' ) { + // Exit uncleanly + quitSaver(); + exit(1); + } } //--------------------------------------------------------------------------- @@ -554,8 +570,7 @@ bool LockProcess::lock() // the screensaver kicks in because the user moved the mouse after // selecting "lock screen", that looks really untidy. mBusy = true; - if (startLock()) - { + if (startLock()) { TQTimer::singleShot(1000, this, TQT_SLOT(slotDeadTimePassed())); return true; } @@ -567,39 +582,40 @@ bool LockProcess::lock() //--------------------------------------------------------------------------- void LockProcess::slotDeadTimePassed() { - mBusy = false; + mBusy = false; } //--------------------------------------------------------------------------- bool LockProcess::defaultSave() { - mLocked = false; - mOverrideHackStartupEnabled = true; - if (startSaver()) { - if (mLockGrace >= 0) - TQTimer::singleShot(mLockGrace, this, TQT_SLOT(startLock())); - return true; - } - return false; + mLocked = false; + mOverrideHackStartupEnabled = true; + if (startSaver()) { + if (mLockGrace >= 0) { + TQTimer::singleShot(mLockGrace, this, TQT_SLOT(startLock())); + } + return true; + } + return false; } //--------------------------------------------------------------------------- bool LockProcess::dontLock() { - mLocked = false; - return startSaver(); + mLocked = false; + return startSaver(); } //--------------------------------------------------------------------------- void LockProcess::quitSaver() { - DISABLE_CONTINUOUS_LOCKDLG_DISPLAY - if (closeCurrentWindow()) { - TQTimer::singleShot( 0, this, SLOT(quitSaver()) ); - return; - } - stopSaver(); - kapp->quit(); + DISABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (closeCurrentWindow()) { + TQTimer::singleShot( 0, this, SLOT(quitSaver()) ); + return; + } + stopSaver(); + kapp->quit(); } //--------------------------------------------------------------------------- @@ -724,47 +740,45 @@ bool LockProcess::inSecureDialog() // void LockProcess::configure() { - // the configuration is stored in kdesktop's config file - if( KDesktopSettings::lock() ) - { - mLockGrace = KDesktopSettings::lockGrace(); - if (mLockGrace < 0) - mLockGrace = 0; - else if (mLockGrace > 300000) - mLockGrace = 300000; // 5 minutes, keep the value sane - } - else - mLockGrace = -1; - - if ( KDesktopSettings::autoLogout() ) - { - mAutoLogout = true; - mAutoLogoutTimeout = KDesktopSettings::autoLogoutTimeout(); - mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout * 1000); // in milliseconds - } - - mPriority = KDesktopSettings::priority(); - if (mPriority < 0) mPriority = 0; - if (mPriority > 19) mPriority = 19; - - mSaver = KDesktopSettings::saver(); - if (mSaver.isEmpty() || mUseBlankOnly) { - mSaver = "KBlankscreen.desktop"; - } - if (!trinity_desktop_lock_use_system_modal_dialogs) { - if (KDesktopSettings::screenSaverEnabled() == false) { - mSaver = ""; - mSaverExec = ""; - } - } - - readSaver(); - - mPlugins = KDesktopSettings::pluginsUnlock(); - if (mPlugins.isEmpty()) { - mPlugins = TQStringList("classic"); - } - mPluginOptions = KDesktopSettings::pluginOptions(); + // the configuration is stored in kdesktop's config file + if( KDesktopSettings::lock() ) { + mLockGrace = KDesktopSettings::lockGrace(); + if (mLockGrace < 0) + mLockGrace = 0; + else if (mLockGrace > 300000) + mLockGrace = 300000; // 5 minutes, keep the value sane + } + else + mLockGrace = -1; + + if ( KDesktopSettings::autoLogout() ) { + mAutoLogout = true; + mAutoLogoutTimeout = KDesktopSettings::autoLogoutTimeout(); + mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout * 1000); // in milliseconds + } + + mPriority = KDesktopSettings::priority(); + if (mPriority < 0) mPriority = 0; + if (mPriority > 19) mPriority = 19; + + mSaver = KDesktopSettings::saver(); + if (mSaver.isEmpty() || mUseBlankOnly) { + mSaver = "KBlankscreen.desktop"; + } + if (!trinity_desktop_lock_use_system_modal_dialogs) { + if (KDesktopSettings::screenSaverEnabled() == false) { + mSaver = ""; + mSaverExec = ""; + } + } + + readSaver(); + + mPlugins = KDesktopSettings::pluginsUnlock(); + if (mPlugins.isEmpty()) { + mPlugins = TQStringList("classic"); + } + mPluginOptions = KDesktopSettings::pluginOptions(); } //--------------------------------------------------------------------------- @@ -773,53 +787,45 @@ void LockProcess::configure() // void LockProcess::readSaver() { - if (!mSaver.isEmpty()) - { - TQString file = locate("scrsav", mSaver); - - bool opengl = kapp->authorize("opengl_screensavers"); - bool manipulatescreen = kapp->authorize("manipulatescreen_screensavers"); - KDesktopFile config(file, true); - if (config.readEntry("X-TDE-Type").utf8() != 0) - { - TQString saverType = config.readEntry("X-TDE-Type").utf8(); - TQStringList saverTypes = TQStringList::split(";", saverType); - for (uint i = 0; i < saverTypes.count(); i++) - { - if ((saverTypes[i] == "ManipulateScreen") && !manipulatescreen) - { - kdDebug(1204) << "Screensaver is type ManipulateScreen and ManipulateScreen is forbidden" << endl; - mForbidden = true; + if (!mSaver.isEmpty()) { + TQString file = locate("scrsav", mSaver); + + bool opengl = kapp->authorize("opengl_screensavers"); + bool manipulatescreen = kapp->authorize("manipulatescreen_screensavers"); + KDesktopFile config(file, true); + if (config.readEntry("X-TDE-Type").utf8() != 0) { + TQString saverType = config.readEntry("X-TDE-Type").utf8(); + TQStringList saverTypes = TQStringList::split(";", saverType); + for (uint i = 0; i < saverTypes.count(); i++) { + if ((saverTypes[i] == "ManipulateScreen") && !manipulatescreen) { + kdDebug(KDESKTOP_DEBUG_ID) << "Screensaver is type ManipulateScreen and ManipulateScreen is forbidden" << endl; + mForbidden = true; + } + if ((saverTypes[i] == "OpenGL") && !opengl) { + kdDebug(KDESKTOP_DEBUG_ID) << "Screensaver is type OpenGL and OpenGL is forbidden" << endl; + mForbidden = true; + } + if (saverTypes[i] == "OpenGL") { + mOpenGLVisual = true; + } } - if ((saverTypes[i] == "OpenGL") && !opengl) - { - kdDebug(1204) << "Screensaver is type OpenGL and OpenGL is forbidden" << endl; - mForbidden = true; + } + + kdDebug(KDESKTOP_DEBUG_ID) << "mForbidden: " << (mForbidden ? "true" : "false") << endl; + + if (trinity_desktop_lock_use_system_modal_dialogs) { + if (config.hasActionGroup("InWindow")) { + config.setActionGroup("InWindow"); + mSaverExec = config.readPathEntry("Exec"); } - if (saverTypes[i] == "OpenGL") - { - mOpenGLVisual = true; + } + else { + if (config.hasActionGroup("Root")) { + config.setActionGroup("Root"); + mSaverExec = config.readPathEntry("Exec"); } } } - - kdDebug(1204) << "mForbidden: " << (mForbidden ? "true" : "false") << endl; - - if (trinity_desktop_lock_use_system_modal_dialogs) { - if (config.hasActionGroup("InWindow")) - { - config.setActionGroup("InWindow"); - mSaverExec = config.readPathEntry("Exec"); - } - } - else { - if (config.hasActionGroup("Root")) - { - config.setActionGroup("Root"); - mSaverExec = config.readPathEntry("Exec"); - } - } - } } //--------------------------------------------------------------------------- @@ -828,229 +834,226 @@ void LockProcess::readSaver() // void LockProcess::createSaverWindow() { - Visual* visual = CopyFromParent; - XSetWindowAttributes attrs; - XVisualInfo* info = NULL; - int flags = trinity_desktop_lock_use_system_modal_dialogs?0:CWOverrideRedirect; + Visual* visual = CopyFromParent; + XSetWindowAttributes attrs; + XVisualInfo* info = NULL; + int flags = trinity_desktop_lock_use_system_modal_dialogs?0:CWOverrideRedirect; #ifdef HAVE_GLXCHOOSEVISUAL - if( mOpenGLVisual ) - { - static int attribs[][ 15 ] = - { - #define R GLX_RED_SIZE - #define G GLX_GREEN_SIZE - #define B GLX_BLUE_SIZE - { GLX_RGBA, R, 8, G, 8, B, 8, GLX_DEPTH_SIZE, 8, GLX_DOUBLEBUFFER, GLX_STENCIL_SIZE, 1, None }, - { GLX_RGBA, R, 4, G, 4, B, 4, GLX_DEPTH_SIZE, 4, GLX_DOUBLEBUFFER, GLX_STENCIL_SIZE, 1, None }, - { GLX_RGBA, R, 8, G, 8, B, 8, GLX_DEPTH_SIZE, 8, GLX_DOUBLEBUFFER, None }, - { GLX_RGBA, R, 4, G, 4, B, 4, GLX_DEPTH_SIZE, 4, GLX_DOUBLEBUFFER, None }, - { GLX_RGBA, R, 8, G, 8, B, 8, GLX_DEPTH_SIZE, 8, GLX_STENCIL_SIZE, 1, None }, - { GLX_RGBA, R, 4, G, 4, B, 4, GLX_DEPTH_SIZE, 4, GLX_STENCIL_SIZE, 1, None }, - { GLX_RGBA, R, 8, G, 8, B, 8, GLX_DEPTH_SIZE, 8, None }, - { GLX_RGBA, R, 4, G, 4, B, 4, GLX_DEPTH_SIZE, 4, None }, - { GLX_RGBA, GLX_DEPTH_SIZE, 8, GLX_DOUBLEBUFFER, GLX_STENCIL_SIZE, 1, None }, - { GLX_RGBA, GLX_DEPTH_SIZE, 8, GLX_DOUBLEBUFFER, None }, - { GLX_RGBA, GLX_DEPTH_SIZE, 8, GLX_STENCIL_SIZE, 1, None }, - { GLX_RGBA, GLX_DEPTH_SIZE, 8, None } - #undef R - #undef G - #undef B - }; - for( unsigned int i = 0; i < sizeof( attribs ) / sizeof( attribs[ 0 ] ); ++i ) { - int n_glxfb_configs; - GLXFBConfig *fbc = glXChooseFBConfig( x11Display(), x11Screen(), attribs[ i ], &n_glxfb_configs); - if (!fbc) { - n_glxfb_configs = 0; - } - for( int j = 0; j < n_glxfb_configs; j++ ) { - info = glXGetVisualFromFBConfig(x11Display(), fbc[j]); - if( info ) { - if (argb_visual) { - if (info->depth < 32) { - XFree( info ); - info = NULL; - continue; - } - } - visual = info->visual; - static Colormap colormap = 0; - if( colormap != 0 ) { - XFreeColormap( x11Display(), colormap ); - } - colormap = XCreateColormap( x11Display(), RootWindow( x11Display(), x11Screen()), visual, AllocNone ); - attrs.colormap = colormap; - flags |= CWColormap; - break; - } - } - if (flags & CWColormap) { - break; - } - } - if ( !info ) - { - printf("[WARNING] Unable to locate matching X11 GLX Visual; this OpenGL application may not function correctly!\n"); - } - } + if( mOpenGLVisual ) { + static int attribs[][ 15 ] = { + #define R GLX_RED_SIZE + #define G GLX_GREEN_SIZE + #define B GLX_BLUE_SIZE + { GLX_RGBA, R, 8, G, 8, B, 8, GLX_DEPTH_SIZE, 8, GLX_DOUBLEBUFFER, GLX_STENCIL_SIZE, 1, None }, + { GLX_RGBA, R, 4, G, 4, B, 4, GLX_DEPTH_SIZE, 4, GLX_DOUBLEBUFFER, GLX_STENCIL_SIZE, 1, None }, + { GLX_RGBA, R, 8, G, 8, B, 8, GLX_DEPTH_SIZE, 8, GLX_DOUBLEBUFFER, None }, + { GLX_RGBA, R, 4, G, 4, B, 4, GLX_DEPTH_SIZE, 4, GLX_DOUBLEBUFFER, None }, + { GLX_RGBA, R, 8, G, 8, B, 8, GLX_DEPTH_SIZE, 8, GLX_STENCIL_SIZE, 1, None }, + { GLX_RGBA, R, 4, G, 4, B, 4, GLX_DEPTH_SIZE, 4, GLX_STENCIL_SIZE, 1, None }, + { GLX_RGBA, R, 8, G, 8, B, 8, GLX_DEPTH_SIZE, 8, None }, + { GLX_RGBA, R, 4, G, 4, B, 4, GLX_DEPTH_SIZE, 4, None }, + { GLX_RGBA, GLX_DEPTH_SIZE, 8, GLX_DOUBLEBUFFER, GLX_STENCIL_SIZE, 1, None }, + { GLX_RGBA, GLX_DEPTH_SIZE, 8, GLX_DOUBLEBUFFER, None }, + { GLX_RGBA, GLX_DEPTH_SIZE, 8, GLX_STENCIL_SIZE, 1, None }, + { GLX_RGBA, GLX_DEPTH_SIZE, 8, None } + #undef R + #undef G + #undef B + }; + for( unsigned int i = 0; i < sizeof( attribs ) / sizeof( attribs[ 0 ] ); ++i ) { + int n_glxfb_configs; + GLXFBConfig *fbc = glXChooseFBConfig( x11Display(), x11Screen(), attribs[ i ], &n_glxfb_configs); + if (!fbc) { + n_glxfb_configs = 0; + } + for( int j = 0; j < n_glxfb_configs; j++ ) { + info = glXGetVisualFromFBConfig(x11Display(), fbc[j]); + if( info ) { + if (argb_visual) { + if (info->depth < 32) { + XFree( info ); + info = NULL; + continue; + } + } + visual = info->visual; + static Colormap colormap = 0; + if( colormap != 0 ) { + XFreeColormap( x11Display(), colormap ); + } + colormap = XCreateColormap( x11Display(), RootWindow( x11Display(), x11Screen()), visual, AllocNone ); + attrs.colormap = colormap; + flags |= CWColormap; + break; + } + } + if (flags & CWColormap) { + break; + } + } + if ( !info ) { + printf("[WARNING] Unable to locate matching X11 GLX Visual; this OpenGL application may not function correctly!\n"); + } + } #endif - attrs.override_redirect = 1; - hide(); - - if (argb_visual) { - // The GL visual selection can return a visual with invalid depth - // Check for this and use a fallback visual if needed - if (info && (info->depth < 32)) { - printf("[WARNING] Unable to locate matching X11 GLX Visual; this OpenGL application may not function correctly!\n"); - XFree( info ); - info = NULL; - flags &= ~CWColormap; - } - - attrs.background_pixel = 0; - attrs.border_pixel = 0; - flags |= CWBackPixel; - flags |= CWBorderPixel; - if (!(flags & CWColormap)) { - if (!info) { - info = new XVisualInfo; - if (!XMatchVisualInfo( x11Display(), x11Screen(), 32, TrueColor, info )) { - printf("[ERROR] Unable to locate matching X11 Visual; this application will not function correctly!\n"); - free(info); - info = NULL; - } - } - if (info) { - visual = info->visual; - attrs.colormap = XCreateColormap( x11Display(), RootWindow( x11Display(), x11Screen()), visual, AllocNone ); - flags |= CWColormap; - } - } - } - if (info) { - XFree( info ); - } - - m_saverRootWindow = XCreateWindow( x11Display(), RootWindow( x11Display(), x11Screen()), x(), y(), width(), height(), 0, x11Depth(), InputOutput, visual, flags, &attrs ); - create( m_saverRootWindow ); - - // Some xscreensaver hacks check for this property - const char *version = "KDE 2.0"; - XChangeProperty (tqt_xdisplay(), winId(), - gXA_SCREENSAVER_VERSION, XA_STRING, 8, PropModeReplace, - (unsigned char *) version, strlen(version)); - - XSetWindowAttributes attr; - attr.event_mask = KeyPressMask | ButtonPressMask | PointerMotionMask | VisibilityChangeMask | ExposureMask; - XChangeWindowAttributes(tqt_xdisplay(), winId(), CWEventMask, &attr); - - // Signal that we want to be transparent to the desktop, not to windows behind us... - XChangeProperty(tqt_xdisplay(), m_saverRootWindow, kde_wm_transparent_to_desktop, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - - // erase(); - - // set NoBackground so that the saver can capture the current - // screen state if necessary - // this is a security risk and has been deactivated--welcome to the 21st century folks! - // setBackgroundMode(TQWidget::NoBackground); - - setGeometry(0, 0, mRootWidth, mRootHeight); - saverReadyIfNeeded(); - - // HACK - // Hide all tooltips and notification windows - { - Window rootWindow = RootWindow(x11Display(), x11Screen()); - Window parent; - Window* children = NULL; - unsigned int noOfChildren = 0; - XWindowAttributes childAttr; - Window childTransient; - - if (XQueryTree(x11Display(), rootWindow, &rootWindow, &parent, &children, &noOfChildren) && noOfChildren>0 ) { - for (unsigned int i=0; i<noOfChildren; i++) { - if (XGetWindowAttributes(x11Display(), children[i], &childAttr) && XGetTransientForHint(x11Display(), children[i], &childTransient)) { - if ((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) { - if (!trinity_desktop_lock_hidden_window_list.contains(children[i])) { - trinity_desktop_lock_hidden_window_list.append(children[i]); - } - XLowerWindow(x11Display(), children[i]); - XFlush(x11Display()); - } - } - } - } - } + attrs.override_redirect = 1; + hide(); + + if (argb_visual) { + // The GL visual selection can return a visual with invalid depth + // Check for this and use a fallback visual if needed + if (info && (info->depth < 32)) { + printf("[WARNING] Unable to locate matching X11 GLX Visual; this OpenGL application may not function correctly!\n"); + XFree( info ); + info = NULL; + flags &= ~CWColormap; + } + + attrs.background_pixel = 0; + attrs.border_pixel = 0; + flags |= CWBackPixel; + flags |= CWBorderPixel; + if (!(flags & CWColormap)) { + if (!info) { + info = new XVisualInfo; + if (!XMatchVisualInfo( x11Display(), x11Screen(), 32, TrueColor, info )) { + printf("[ERROR] Unable to locate matching X11 Visual; this application will not function correctly!\n"); + free(info); + info = NULL; + } + } + if (info) { + visual = info->visual; + attrs.colormap = XCreateColormap( x11Display(), RootWindow( x11Display(), x11Screen()), visual, AllocNone ); + flags |= CWColormap; + } + } + } + if (info) { + XFree( info ); + } + + m_saverRootWindow = XCreateWindow( x11Display(), RootWindow( x11Display(), x11Screen()), x(), y(), width(), height(), 0, x11Depth(), InputOutput, visual, flags, &attrs ); + create( m_saverRootWindow ); + + // Some xscreensaver hacks check for this property + const char *version = "KDE 2.0"; + XChangeProperty (tqt_xdisplay(), winId(), + gXA_SCREENSAVER_VERSION, XA_STRING, 8, PropModeReplace, + (unsigned char *) version, strlen(version)); + + XSetWindowAttributes attr; + attr.event_mask = KeyPressMask | ButtonPressMask | PointerMotionMask | VisibilityChangeMask | ExposureMask; + XChangeWindowAttributes(tqt_xdisplay(), winId(), CWEventMask, &attr); + + // Signal that we want to be transparent to the desktop, not to windows behind us... + XChangeProperty(tqt_xdisplay(), m_saverRootWindow, kde_wm_transparent_to_desktop, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + + // erase(); - kdDebug(1204) << "Saver window Id: " << winId() << endl; + // set NoBackground so that the saver can capture the current + // screen state if necessary + // this is a security risk and has been deactivated--welcome to the 21st century folks! + // setBackgroundMode(TQWidget::NoBackground); + + setGeometry(0, 0, mRootWidth, mRootHeight); + saverReadyIfNeeded(); + + // HACK + // Hide all tooltips and notification windows + { + Window rootWindow = RootWindow(x11Display(), x11Screen()); + Window parent; + Window* children = NULL; + unsigned int noOfChildren = 0; + XWindowAttributes childAttr; + Window childTransient; + + if (XQueryTree(x11Display(), rootWindow, &rootWindow, &parent, &children, &noOfChildren) && noOfChildren>0 ) { + for (unsigned int i=0; i<noOfChildren; i++) { + if (XGetWindowAttributes(x11Display(), children[i], &childAttr) && XGetTransientForHint(x11Display(), children[i], &childTransient)) { + if ((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) { + if (!trinity_desktop_lock_hidden_window_list.contains(children[i])) { + trinity_desktop_lock_hidden_window_list.append(children[i]); + } + XLowerWindow(x11Display(), children[i]); + XFlush(x11Display()); + } + } + } + } + } + + kdDebug(KDESKTOP_DEBUG_ID) << "Saver window Id: " << winId() << endl; } void LockProcess::desktopResized() { - // Get root window size - XWindowAttributes rootAttr; - XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr); - if ((rootAttr.width == mRootWidth) && (rootAttr.height == mRootHeight)) { - return; - } - mRootWidth = rootAttr.width; - mRootHeight = rootAttr.height; - generateBackingImages(); - - mBusy = true; - mHackDelayStartupTimer->stop(); - stopHack(); - DISABLE_CONTINUOUS_LOCKDLG_DISPLAY - mResizingDesktopLock = true; - - backingPixmap = TQPixmap(); - - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Temporarily hide the entire screen with a new override redirect window - if (m_maskWidget) { - m_maskWidget->setGeometry(0, 0, mRootWidth, mRootHeight); - } - else { - m_maskWidget = new TQWidget(0, 0, TQt::WStyle_StaysOnTop | TQt::WX11BypassWM); - m_maskWidget->setGeometry(0, 0, mRootWidth, mRootHeight); - m_maskWidget->setBackgroundColor(TQt::black); - m_maskWidget->erase(); - m_maskWidget->show(); - } + // Get root window size + XWindowAttributes rootAttr; + XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr); + if ((rootAttr.width == mRootWidth) && (rootAttr.height == mRootHeight)) { + return; + } + mRootWidth = rootAttr.width; + mRootHeight = rootAttr.height; + generateBackingImages(); + + mBusy = true; + mHackDelayStartupTimer->stop(); + stopHack(); + DISABLE_CONTINUOUS_LOCKDLG_DISPLAY + mResizingDesktopLock = true; + + backingPixmap = TQPixmap(); + + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Temporarily hide the entire screen with a new override redirect window + if (m_maskWidget) { + m_maskWidget->setGeometry(0, 0, mRootWidth, mRootHeight); + } + else { + m_maskWidget = new TQWidget(0, 0, TQt::WStyle_StaysOnTop | TQt::WX11BypassWM); + m_maskWidget->setGeometry(0, 0, mRootWidth, mRootHeight); + m_maskWidget->setBackgroundColor(TQt::black); + m_maskWidget->erase(); + m_maskWidget->show(); + } + XSync(tqt_xdisplay(), False); + saverReadyIfNeeded(); + + if (mEnsureScreenHiddenTimer) { + mEnsureScreenHiddenTimer->stop(); + } + else { + mEnsureScreenHiddenTimer = new TQTimer( this ); + connect( mEnsureScreenHiddenTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotForcePaintBackground()) ); + } + mEnsureScreenHiddenTimer->start(DESKTOP_WALLPAPER_OBTAIN_TIMEOUT_MS, true); + } + + // Resize the background widget + setGeometry(0, 0, mRootWidth, mRootHeight); XSync(tqt_xdisplay(), False); saverReadyIfNeeded(); - if (mEnsureScreenHiddenTimer) { - mEnsureScreenHiddenTimer->stop(); + // Black out the background widget to hide ugly resize tiling artifacts + if (argb_visual) { + setTransparentBackgroundARGB(); } else { - mEnsureScreenHiddenTimer = new TQTimer( this ); - connect( mEnsureScreenHiddenTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotForcePaintBackground()) ); + setBackgroundColor(black); } - mEnsureScreenHiddenTimer->start(DESKTOP_WALLPAPER_OBTAIN_TIMEOUT_MS, true); - } - - // Resize the background widget - setGeometry(0, 0, mRootWidth, mRootHeight); - XSync(tqt_xdisplay(), False); - saverReadyIfNeeded(); - - // Black out the background widget to hide ugly resize tiling artifacts - if (argb_visual) { - setTransparentBackgroundARGB(); - } - else { - setBackgroundColor(black); - } - erase(); + erase(); - // This slot needs to be able to execute very rapidly so as to prevent the user's desktop from ever - // being displayed, so we finish the hack restarting/display prettying operations in a separate timed slot - if (resizeTimer == NULL) { - resizeTimer = new TQTimer( this ); - connect( resizeTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(doDesktopResizeFinish()) ); - } - resizeTimer->start( 100, TRUE ); // 100 millisecond single shot timer; should allow display switching operations to finish before hack is started + // This slot needs to be able to execute very rapidly so as to prevent the user's desktop from ever + // being displayed, so we finish the hack restarting/display prettying operations in a separate timed slot + if (resizeTimer == NULL) { + resizeTimer = new TQTimer( this ); + connect( resizeTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(doDesktopResizeFinish()) ); + } + resizeTimer->start( 100, TRUE ); // 100 millisecond single shot timer; should allow display switching operations to finish before hack is started } void LockProcess::doDesktopResizeFinish() @@ -1096,23 +1099,23 @@ void LockProcess::doDesktopResizeFinish() // void LockProcess::hideSaverWindow() { - hide(); - lower(); - removeVRoot(winId()); - XDeleteProperty(tqt_xdisplay(), winId(), gXA_SCREENSAVER_VERSION); - if ( gVRoot ) { - unsigned long vroot_data[1] = { gVRootData }; - XChangeProperty(tqt_xdisplay(), gVRoot, gXA_VROOT, XA_WINDOW, 32, - PropModeReplace, (unsigned char *)vroot_data, 1); - gVRoot = 0; - } - XSync(tqt_xdisplay(), False); + hide(); + lower(); + removeVRoot(winId()); + XDeleteProperty(tqt_xdisplay(), winId(), gXA_SCREENSAVER_VERSION); + if ( gVRoot ) { + unsigned long vroot_data[1] = { gVRootData }; + XChangeProperty(tqt_xdisplay(), gVRoot, gXA_VROOT, XA_WINDOW, 32, + PropModeReplace, (unsigned char *)vroot_data, 1); + gVRoot = 0; + } + XSync(tqt_xdisplay(), False); } //--------------------------------------------------------------------------- static int ignoreXError(Display *, XErrorEvent *) { - return 0; + return 0; } //--------------------------------------------------------------------------- @@ -1121,44 +1124,39 @@ static int ignoreXError(Display *, XErrorEvent *) // void LockProcess::saveVRoot() { - Window rootReturn, parentReturn, *children; - unsigned int numChildren; - Window root = RootWindowOfScreen(ScreenOfDisplay(tqt_xdisplay(), tqt_xscreen())); - - gVRoot = 0; - gVRootData = 0; - - int (*oldHandler)(Display *, XErrorEvent *); - oldHandler = XSetErrorHandler(ignoreXError); - - if (XQueryTree(tqt_xdisplay(), root, &rootReturn, &parentReturn, - &children, &numChildren)) - { - for (unsigned int i = 0; i < numChildren; i++) - { - Atom actual_type; - int actual_format; - unsigned long nitems, bytesafter; - unsigned char *newRoot = 0; - - if ((XGetWindowProperty(tqt_xdisplay(), children[i], gXA_VROOT, 0, 1, - False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytesafter, - &newRoot) == Success) && newRoot) - { - gVRoot = children[i]; - Window *dummy = (Window*)newRoot; - gVRootData = *dummy; - XFree ((char*) newRoot); - break; - } - } - if (children) - { - XFree((char *)children); - } - } - - XSetErrorHandler(oldHandler); + Window rootReturn, parentReturn, *children; + unsigned int numChildren; + Window root = RootWindowOfScreen(ScreenOfDisplay(tqt_xdisplay(), tqt_xscreen())); + + gVRoot = 0; + gVRootData = 0; + + int (*oldHandler)(Display *, XErrorEvent *); + oldHandler = XSetErrorHandler(ignoreXError); + + if (XQueryTree(tqt_xdisplay(), root, &rootReturn, &parentReturn, &children, &numChildren)) { + for (unsigned int i = 0; i < numChildren; i++) { + Atom actual_type; + int actual_format; + unsigned long nitems, bytesafter; + unsigned char *newRoot = 0; + + if ((XGetWindowProperty(tqt_xdisplay(), children[i], gXA_VROOT, 0, 1, + False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytesafter, + &newRoot) == Success) && newRoot) { + gVRoot = children[i]; + Window *dummy = (Window*)newRoot; + gVRootData = *dummy; + XFree ((char*) newRoot); + break; + } + } + if (children) { + XFree((char *)children); + } + } + + XSetErrorHandler(oldHandler); } //--------------------------------------------------------------------------- @@ -1167,35 +1165,35 @@ void LockProcess::saveVRoot() // void LockProcess::setVRoot(Window win, Window vr) { - if (gVRoot) { - removeVRoot(gVRoot); - } - - unsigned long rw = RootWindowOfScreen(ScreenOfDisplay(tqt_xdisplay(), tqt_xscreen())); - unsigned long vroot_data[1] = { vr }; - - Window rootReturn; - Window parentReturn; - Window *children = NULL; - unsigned int numChildren; - Window top = win; - while (1) { - if (XQueryTree(tqt_xdisplay(), top, &rootReturn, &parentReturn, &children, &numChildren) == 0) { - printf("[WARNING] XQueryTree() failed!\n"); fflush(stdout); - break; - } - if (children) { - XFree((char *)children); - } - if (parentReturn == rw) { - break; - } - else { - top = parentReturn; - } - } - - XChangeProperty(tqt_xdisplay(), top, gXA_VROOT, XA_WINDOW, 32, PropModeReplace, (unsigned char *)vroot_data, 1); + if (gVRoot) { + removeVRoot(gVRoot); + } + + unsigned long rw = RootWindowOfScreen(ScreenOfDisplay(tqt_xdisplay(), tqt_xscreen())); + unsigned long vroot_data[1] = { vr }; + + Window rootReturn; + Window parentReturn; + Window *children = NULL; + unsigned int numChildren; + Window top = win; + while (1) { + if (XQueryTree(tqt_xdisplay(), top, &rootReturn, &parentReturn, &children, &numChildren) == 0) { + printf("[WARNING] XQueryTree() failed!\n"); fflush(stdout); + break; + } + if (children) { + XFree((char *)children); + } + if (parentReturn == rw) { + break; + } + else { + top = parentReturn; + } + } + + XChangeProperty(tqt_xdisplay(), top, gXA_VROOT, XA_WINDOW, 32, PropModeReplace, (unsigned char *)vroot_data, 1); } //--------------------------------------------------------------------------- @@ -1204,7 +1202,7 @@ void LockProcess::setVRoot(Window win, Window vr) // void LockProcess::removeVRoot(Window win) { - XDeleteProperty (tqt_xdisplay(), win, gXA_VROOT); + XDeleteProperty (tqt_xdisplay(), win, gXA_VROOT); } //--------------------------------------------------------------------------- @@ -1213,10 +1211,13 @@ void LockProcess::removeVRoot(Window win) // bool LockProcess::grabKeyboard() { - int rv = XGrabKeyboard( tqt_xdisplay(), TQApplication::desktop()->winId(), - True, GrabModeAsync, GrabModeAsync, CurrentTime ); + int rv = XGrabKeyboard( tqt_xdisplay(), TQApplication::desktop()->winId(), + True, GrabModeAsync, GrabModeAsync, CurrentTime ); - return (rv == GrabSuccess); + if (rv != GrabSuccess) { + kdWarning(1204) << "LockProcess::grabKeyboard() failed: " << rv << endl; + } + return (rv == GrabSuccess); } #define GRABEVENTS ButtonPressMask | ButtonReleaseMask | PointerMotionMask | \ @@ -1228,18 +1229,21 @@ bool LockProcess::grabKeyboard() // bool LockProcess::grabMouse() { - HANDLE cursorHandle; - if (mHackActive) { - cursorHandle = TQCursor(tqblankCursor).handle(); - } - else { - cursorHandle = TQCursor(tqbusyCursor).handle(); - } - int rv = XGrabPointer( tqt_xdisplay(), TQApplication::desktop()->winId(), - True, GRABEVENTS, GrabModeAsync, GrabModeAsync, None, - cursorHandle, CurrentTime ); + HANDLE cursorHandle; + if (mHackActive) { + cursorHandle = TQCursor(tqblankCursor).handle(); + } + else { + cursorHandle = TQCursor(tqbusyCursor).handle(); + } + int rv = XGrabPointer( tqt_xdisplay(), TQApplication::desktop()->winId(), + True, GRABEVENTS, GrabModeAsync, GrabModeAsync, None, + cursorHandle, CurrentTime ); - return (rv == GrabSuccess); + if (rv != GrabSuccess) { + kdWarning(1204) << "LockProcess::grabMouse() failed: " << rv << endl; + } + return (rv == GrabSuccess); } //--------------------------------------------------------------------------- @@ -1248,32 +1252,28 @@ bool LockProcess::grabMouse() // bool LockProcess::grabInput() { - XSync(tqt_xdisplay(), False); + XSync(tqt_xdisplay(), False); - if (!grabKeyboard()) - { - usleep(100000); - if (!grabKeyboard()) - { - return false; - } - } + if (!grabKeyboard()) { + usleep(100000); + if (!grabKeyboard()) { + return false; + } + } #ifndef KEEP_MOUSE_UNGRABBED - if (!grabMouse()) - { - usleep(100000); - if (!grabMouse()) - { - XUngrabKeyboard(tqt_xdisplay(), CurrentTime); - return false; - } - } + if (!grabMouse()) { + usleep(100000); + if (!grabMouse()) { + XUngrabKeyboard(tqt_xdisplay(), CurrentTime); + return false; + } + } #endif - lockXF86(); + lockXF86(); - return true; + return true; } //--------------------------------------------------------------------------- @@ -1282,9 +1282,9 @@ bool LockProcess::grabInput() // void LockProcess::ungrabInput() { - XUngrabKeyboard(tqt_xdisplay(), CurrentTime); - XUngrabPointer(tqt_xdisplay(), CurrentTime); - unlockXF86(); + XUngrabKeyboard(tqt_xdisplay(), CurrentTime); + XUngrabPointer(tqt_xdisplay(), CurrentTime); + unlockXF86(); } //--------------------------------------------------------------------------- @@ -1330,7 +1330,7 @@ bool LockProcess::startSaver(bool notify_ready) { if (!child_saver && !grabInput()) { - kdWarning(1204) << "LockProcess::startSaver() grabInput() failed!!!!" << endl; + kdWarning(KDESKTOP_DEBUG_ID) << "LockProcess::startSaver() grabInput() failed!!!!" << endl; return false; } mBusy = false; @@ -1416,39 +1416,42 @@ bool LockProcess::startSaver(bool notify_ready) // void LockProcess::stopSaver() { - kdDebug(1204) << "LockProcess: stopping saver" << endl; - mHackProc.kill(SIGCONT); - stopHack(); - mSuspended = false; - hideSaverWindow(); - mVisibility = false; - if (!child_saver) { - if (mLocked) - DM().setLock( false ); - ungrabInput(); - const char *out = "GOAWAY!"; - for (TQValueList<int>::ConstIterator it = child_sockets.begin(); it != child_sockets.end(); ++it) - if (write(*it, out, sizeof(out)) == -1) { - // Error handler to shut up gcc warnings - } - } + kdDebug(KDESKTOP_DEBUG_ID) << "LockProcess: stopping saver" << endl; + mHackProc.kill(SIGCONT); + stopHack(); + mSuspended = false; + hideSaverWindow(); + mVisibility = false; + if (!child_saver) { + if (mLocked) { + DM().setLock( false ); + } + ungrabInput(); + const char *out = "GOAWAY!"; + for (TQValueList<int>::ConstIterator it = child_sockets.begin(); it != child_sockets.end(); ++it) { + if (write(*it, out, sizeof(out)) == -1) { + // Error handler to shut up gcc warnings + } + } + } } // private static TQVariant LockProcess::getConf(void *ctx, const char *key, const TQVariant &dflt) { - LockProcess *that = (LockProcess *)ctx; - TQString fkey = TQString::fromLatin1( key ) + '='; - for (TQStringList::ConstIterator it = that->mPluginOptions.begin(); - it != that->mPluginOptions.end(); ++it) - if ((*it).startsWith( fkey )) - return (*it).mid( fkey.length() ); - return dflt; + LockProcess *that = (LockProcess *)ctx; + TQString fkey = TQString::fromLatin1( key ) + '='; + for (TQStringList::ConstIterator it = that->mPluginOptions.begin(); it != that->mPluginOptions.end(); ++it) { + if ((*it).startsWith( fkey )) { + return (*it).mid( fkey.length() ); + } + } + return dflt; } void LockProcess::cantLock( const TQString &txt) { - msgBox( TQMessageBox::Critical, i18n("Will not lock the session, as unlocking would be impossible:\n") + txt ); + msgBox( TQMessageBox::Critical, i18n("Will not lock the session, as unlocking would be impossible:\n") + txt ); } #if 0 // placeholders for later @@ -1462,42 +1465,41 @@ i18n("<i>kcheckpass</i> is unable to operate. Possibly it is not SetUID root."); // bool LockProcess::startLock() { - for (TQStringList::ConstIterator it = mPlugins.begin(); it != mPlugins.end(); ++it) { - GreeterPluginHandle plugin; - TQString path = KLibLoader::self()->findLibrary( - ((*it)[0] == '/' ? *it : "kgreet_" + *it ).latin1() ); - if (path.isEmpty()) { - kdWarning(1204) << "GreeterPlugin " << *it << " does not exist" << endl; - continue; - } - if (!(plugin.library = KLibLoader::self()->library( path.latin1() ))) { - kdWarning(1204) << "Cannot load GreeterPlugin " << *it << " (" << path << ")" << endl; - continue; - } - if (!plugin.library->hasSymbol( "kgreeterplugin_info" )) { - kdWarning(1204) << "GreeterPlugin " << *it << " (" << path << ") is no valid greet widget plugin" << endl; - plugin.library->unload(); - continue; - } - plugin.info = (kgreeterplugin_info*)plugin.library->symbol( "kgreeterplugin_info" ); - if (plugin.info->method && !mMethod.isEmpty() && mMethod != plugin.info->method) { - kdDebug(1204) << "GreeterPlugin " << *it << " (" << path << ") serves " << plugin.info->method << ", not " << mMethod << endl; - plugin.library->unload(); - continue; - } - if (!plugin.info->init( mMethod, getConf, this )) { - kdDebug(1204) << "GreeterPlugin " << *it << " (" << path << ") refuses to serve " << mMethod << endl; - plugin.library->unload(); - continue; - } - kdDebug(1204) << "GreeterPlugin " << *it << " (" << plugin.info->method << ", " << plugin.info->name << ") loaded" << endl; - greetPlugin = plugin; - mLocked = true; - DM().setLock( true ); - return true; - } - cantLock( i18n("No appropriate greeter plugin configured.") ); - return false; + for (TQStringList::ConstIterator it = mPlugins.begin(); it != mPlugins.end(); ++it) { + GreeterPluginHandle plugin; + TQString path = KLibLoader::self()->findLibrary( ((*it)[0] == '/' ? *it : "kgreet_" + *it ).latin1() ); + if (path.isEmpty()) { + kdWarning(KDESKTOP_DEBUG_ID) << "GreeterPlugin " << *it << " does not exist" << endl; + continue; + } + if (!(plugin.library = KLibLoader::self()->library( path.latin1() ))) { + kdWarning(KDESKTOP_DEBUG_ID) << "Cannot load GreeterPlugin " << *it << " (" << path << ")" << endl; + continue; + } + if (!plugin.library->hasSymbol( "kgreeterplugin_info" )) { + kdWarning(KDESKTOP_DEBUG_ID) << "GreeterPlugin " << *it << " (" << path << ") is no valid greet widget plugin" << endl; + plugin.library->unload(); + continue; + } + plugin.info = (kgreeterplugin_info*)plugin.library->symbol( "kgreeterplugin_info" ); + if (plugin.info->method && !mMethod.isEmpty() && mMethod != plugin.info->method) { + kdDebug(KDESKTOP_DEBUG_ID) << "GreeterPlugin " << *it << " (" << path << ") serves " << plugin.info->method << ", not " << mMethod << endl; + plugin.library->unload(); + continue; + } + if (!plugin.info->init( mMethod, getConf, this )) { + kdDebug(KDESKTOP_DEBUG_ID) << "GreeterPlugin " << *it << " (" << path << ") refuses to serve " << mMethod << endl; + plugin.library->unload(); + continue; + } + kdDebug(KDESKTOP_DEBUG_ID) << "GreeterPlugin " << *it << " (" << plugin.info->method << ", " << plugin.info->name << ") loaded" << endl; + greetPlugin = plugin; + mLocked = true; + DM().setLock( true ); + return true; + } + cantLock( i18n("No appropriate greeter plugin configured.") ); + return false; } //--------------------------------------------------------------------------- @@ -1563,168 +1565,165 @@ void LockProcess::repaintRootWindowIfNeeded() bool LockProcess::startHack() { - mHackActive = TRUE; + mHackActive = TRUE; - if ((mEnsureVRootWindowSecurityTimer) && (!mEnsureVRootWindowSecurityTimer->isActive())) mEnsureVRootWindowSecurityTimer->start(250, FALSE); - - if (currentDialog || (!mDialogs.isEmpty())) - { - // no resuming with dialog visible or when not visible - if (argb_visual) { - setTransparentBackgroundARGB(); + if ((mEnsureVRootWindowSecurityTimer) && (!mEnsureVRootWindowSecurityTimer->isActive())) { + mEnsureVRootWindowSecurityTimer->start(250, FALSE); } - else { - if (backingPixmap.isNull()) { - setBackgroundColor(black); + + if (currentDialog || (!mDialogs.isEmpty())) { + // no resuming with dialog visible or when not visible + if (argb_visual) { + setTransparentBackgroundARGB(); } else { - setBackgroundPixmap(backingPixmap); + if (backingPixmap.isNull()) { + setBackgroundColor(black); + } + else { + setBackgroundPixmap(backingPixmap); + } } + setGeometry(0, 0, mRootWidth, mRootHeight); + erase(); + saverReadyIfNeeded(); + return false; } - setGeometry(0, 0, mRootWidth, mRootHeight); - erase(); - saverReadyIfNeeded(); - return false; - } - - setCursor( tqblankCursor ); - XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqblankCursor).handle(), CurrentTime); - - if (mSaverExec.isEmpty()) - { - return false; - } - - if (mHackProc.isRunning()) - { - stopHack(); - } - - mHackProc.clearArguments(); - - TQTextStream ts(&mSaverExec, IO_ReadOnly); - TQString word; - ts >> word; - TQString path = TDEStandardDirs::findExe(word); - - if (!path.isEmpty()) - { - mHackProc << path; - - kdDebug(1204) << "Starting hack: " << path << endl; - - while (!ts.atEnd()) - { - ts >> word; - if (word == "%w") - { - word = word.setNum(winId()); - } - mHackProc << word; - } - - if (!mForbidden) - { - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Make sure we have a nice clean display to start with! - if (argb_visual) { - // Signal that we want to be transparent to a black background... - if (m_saverRootWindow) { - XChangeProperty(tqt_xdisplay(), m_saverRootWindow, kde_wm_transparent_to_black, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - XClearArea(tqt_xdisplay(), m_saverRootWindow, 0, 0, 0, 0, True); - } - setTransparentBackgroundARGB(); + + setCursor( tqblankCursor ); + XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqblankCursor).handle(), CurrentTime); + + if (mSaverExec.isEmpty()) { + return false; + } + + if (mHackProc.isRunning()) { + stopHack(); + } + + mHackProc.clearArguments(); + + TQTextStream ts(&mSaverExec, IO_ReadOnly); + TQString word; + ts >> word; + TQString path = TDEStandardDirs::findExe(word); + + if (!path.isEmpty()) { + mHackProc << path; + + kdDebug(KDESKTOP_DEBUG_ID) << "Starting hack: " << path << endl; + + while (!ts.atEnd()) { + ts >> word; + if (word == "%w") + { + word = word.setNum(winId()); } - else { - if (backingPixmap.isNull()) { - setBackgroundColor(black); + mHackProc << word; + } + + if (!mForbidden) { + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Make sure we have a nice clean display to start with! + if (argb_visual) { + // Signal that we want to be transparent to a black background... + if (m_saverRootWindow) { + XChangeProperty(tqt_xdisplay(), m_saverRootWindow, kde_wm_transparent_to_black, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + XClearArea(tqt_xdisplay(), m_saverRootWindow, 0, 0, 0, 0, True); + } + setTransparentBackgroundARGB(); } else { - setBackgroundPixmap(backingPixmap); + if (backingPixmap.isNull()) { + setBackgroundColor(black); + } + else { + setBackgroundPixmap(backingPixmap); + } } + setGeometry(0, 0, mRootWidth, mRootHeight); + erase(); + saverReadyIfNeeded(); + mSuspended = false; } - setGeometry(0, 0, mRootWidth, mRootHeight); - erase(); - saverReadyIfNeeded(); - mSuspended = false; - } - XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqblankCursor).handle(), CurrentTime); - if (mHackProc.start() == true) - { + XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqblankCursor).handle(), CurrentTime); + if (mHackProc.start() == true) { #ifdef HAVE_SETPRIORITY - setpriority(PRIO_PROCESS, mHackProc.pid(), mPriority); + setpriority(PRIO_PROCESS, mHackProc.pid(), mPriority); #endif - //bitBlt(this, 0, 0, &mOriginal); - DISABLE_CONTINUOUS_LOCKDLG_DISPLAY - if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced) { - // Close any active dialogs - if (closeCurrentWindow()) { - TQTimer::singleShot( 0, this, SLOT(closeCurrentWindow()) ); + //bitBlt(this, 0, 0, &mOriginal); + DISABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced) { + // Close any active dialogs + if (closeCurrentWindow()) { + TQTimer::singleShot( 0, this, SLOT(closeCurrentWindow()) ); + } } + if (m_startupStatusDialog) { m_startupStatusDialog->closeSMDialog(); m_startupStatusDialog=NULL; } + return true; } - if (m_startupStatusDialog) { m_startupStatusDialog->closeSMDialog(); m_startupStatusDialog=NULL; } - return true; } - } - else - // we aren't allowed to start the specified screensaver either because it didn't run for some reason - // according to the kiosk restrictions forbid it - { - usleep(100); - TQApplication::syncX(); - if (!trinity_desktop_lock_use_system_modal_dialogs) { + else { + // we aren't allowed to start the specified screensaver either because it didn't run for some reason + // according to the kiosk restrictions forbid it + usleep(100); + TQApplication::syncX(); + if (!trinity_desktop_lock_use_system_modal_dialogs) { + if (argb_visual) { + setTransparentBackgroundARGB(); + } + else { + if (backingPixmap.isNull()) { + setBackgroundColor(black); + } + else { + setBackgroundPixmap(backingPixmap); + } + } + } if (argb_visual) { setTransparentBackgroundARGB(); + erase(); } else { if (backingPixmap.isNull()) { - setBackgroundColor(black); + setGeometry(0, 0, mRootWidth, mRootHeight); + erase(); } else { - setBackgroundPixmap(backingPixmap); + bitBlt(this, 0, 0, &backingPixmap); } } - } - if (argb_visual) { - setTransparentBackgroundARGB(); - erase(); - } - else { - if (backingPixmap.isNull()) { - setGeometry(0, 0, mRootWidth, mRootHeight); - erase(); - } - else { - bitBlt(this, 0, 0, &backingPixmap); + if (trinity_desktop_lock_use_system_modal_dialogs) { + ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); } + saverReadyIfNeeded(); } - if (trinity_desktop_lock_use_system_modal_dialogs) { - ENABLE_CONTINUOUS_LOCKDLG_DISPLAY - if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); - } - saverReadyIfNeeded(); } - } - if (m_startupStatusDialog) { m_startupStatusDialog->closeSMDialog(); m_startupStatusDialog=NULL; } - return false; + + if (m_startupStatusDialog) { + m_startupStatusDialog->closeSMDialog(); + m_startupStatusDialog=NULL; + } + + return false; } //--------------------------------------------------------------------------- // void LockProcess::stopHack() { - if (mHackProc.isRunning()) - { - mHackProc.kill(); - if (!mHackProc.wait(10)) - { - mHackProc.kill(SIGKILL); - } - } - setCursor( tqarrowCursor ); + if (mHackProc.isRunning()) { + mHackProc.kill(); + if (!mHackProc.wait(10)) { + mHackProc.kill(SIGKILL); + } + } + setCursor( tqarrowCursor ); - mHackActive = FALSE; + mHackActive = FALSE; } //--------------------------------------------------------------------------- @@ -1799,81 +1798,81 @@ void LockProcess::displayLockDialogIfNeeded() void LockProcess::suspend() { - if(!mSuspended) - { - if (trinity_desktop_lock_use_system_modal_dialogs) { - mSuspended = true; - stopHack(); - ENABLE_CONTINUOUS_LOCKDLG_DISPLAY - if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); - } - else { - TQString hackStatus; - mHackProc.kill(SIGSTOP); - mSuspended = true; + if (!mSuspended) { + if (trinity_desktop_lock_use_system_modal_dialogs) { + mSuspended = true; + stopHack(); + ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (mHackStartupEnabled) { + mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); + } + } + else { + TQString hackStatus; + mHackProc.kill(SIGSTOP); + mSuspended = true; #if 0 - // wait for the stop signal to take effect - while (hackStatus != "T") { - char hackstat[8192]; - FILE *fp = fopen(TQString("/proc/%1/stat").arg(mHackProc.pid()).ascii(),"r"); - if (fp != NULL) { - fgets (hackstat, 8192, fp); - fclose (fp); - } - hackstat[8191] = 0; - hackStatus = hackstat; - hackStatus = hackStatus.remove(TQRegExp("(*) ", TRUE, TRUE)); - TQStringList hackStatusList = TQStringList::split(" ", hackStatus); - hackStatus = (*(hackStatusList.at(1))); - } + // wait for the stop signal to take effect + while (hackStatus != "T") { + char hackstat[8192]; + FILE *fp = fopen(TQString("/proc/%1/stat").arg(mHackProc.pid()).ascii(),"r"); + if (fp != NULL) { + fgets (hackstat, 8192, fp); + fclose (fp); + } + hackstat[8191] = 0; + hackStatus = hackstat; + hackStatus = hackStatus.remove(TQRegExp("(*) ", TRUE, TRUE)); + TQStringList hackStatusList = TQStringList::split(" ", hackStatus); + hackStatus = (*(hackStatusList.at(1))); + } #endif - TQApplication::syncX(); - usleep(100000); // Allow certain bad graphics drivers (*cough* fglrx *cough*) time to actually sync up the display - } - TQApplication::syncX(); - mSavedScreen = TQPixmap::grabWindow( winId()); - } + TQApplication::syncX(); + usleep(100000); // Allow certain bad graphics drivers (*cough* fglrx *cough*) time to actually sync up the display + } + TQApplication::syncX(); + mSavedScreen = TQPixmap::grabWindow( winId()); + } } void LockProcess::resume( bool force ) { - if (trinity_desktop_lock_use_sak && (mHackDelayStartupTimer->isActive() || !mHackStartupEnabled)) { - return; - } - if( !force && (!mDialogs.isEmpty() || !mVisibility )) { - // no resuming with dialog visible or when not visible - if (trinity_desktop_lock_use_system_modal_dialogs) { - if (argb_visual) { - setTransparentBackgroundARGB(); - } - else { - if (backingPixmap.isNull()) { - setBackgroundColor(black); + if (trinity_desktop_lock_use_sak && (mHackDelayStartupTimer->isActive() || !mHackStartupEnabled)) { + return; + } + if( !force && (!mDialogs.isEmpty() || !mVisibility )) { + // no resuming with dialog visible or when not visible + if (trinity_desktop_lock_use_system_modal_dialogs) { + if (argb_visual) { + setTransparentBackgroundARGB(); } else { - setBackgroundPixmap(backingPixmap); + if (backingPixmap.isNull()) { + setBackgroundColor(black); + } + else { + setBackgroundPixmap(backingPixmap); + } } + setGeometry(0, 0, mRootWidth, mRootHeight); + erase(); } - setGeometry(0, 0, mRootWidth, mRootHeight); - erase(); + else { + setGeometry(0, 0, mRootWidth, mRootHeight); + } + saverReadyIfNeeded(); + return; } - else { - setGeometry(0, 0, mRootWidth, mRootHeight); + if ((mSuspended) && (mHackProc.isRunning())) { + XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset ); + bitBlt( this, 0, 0, &mSavedScreen ); + TQApplication::syncX(); + mHackProc.kill(SIGCONT); + mSuspended = false; + } + else if (mSuspended && trinity_desktop_lock_use_system_modal_dialogs) { + startHack(); } - saverReadyIfNeeded(); - return; - } - if ((mSuspended) && (mHackProc.isRunning())) - { - XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset ); - bitBlt( this, 0, 0, &mSavedScreen ); - TQApplication::syncX(); - mHackProc.kill(SIGCONT); - mSuspended = false; - } - else if (mSuspended && trinity_desktop_lock_use_system_modal_dialogs) { - startHack(); - } } //--------------------------------------------------------------------------- @@ -1883,152 +1882,153 @@ void LockProcess::resume( bool force ) // bool LockProcess::checkPass() { - if (!mDialogs.isEmpty()) { - // Another dialog is already shown - // Abort! - return 0; - } - if (mInfoMessageDisplayed == false) { - if (mAutoLogout) { - killTimer(mAutoLogoutTimerId); - } - - // Make sure we never launch the SAK or login dialog if windows are being closed down - // Otherwise we can get stuck in an irrecoverable state where any attempt to show the login screen is instantly aborted - if (mClosingWindows) { - return 0; - } - - if (trinity_desktop_lock_use_sak) { - // Verify SAK operational status - TDEProcess* checkSAKProcess = new TDEProcess; - *checkSAKProcess << "tdmtsak" << "check"; - checkSAKProcess->start(TDEProcess::Block, TDEProcess::NoCommunication); - int retcode = checkSAKProcess->exitStatus(); - delete checkSAKProcess; - if (retcode != 0) { - trinity_desktop_lock_use_sak = false; - } - } - - if (trinity_desktop_lock_use_sak) { - // Wait for SAK press before continuing... - SAKDlg inDlg( this ); - execDialog( &inDlg ); - if (mClosingWindows) { - return 0; - } - } - - showVkbd(); - PasswordDlg passDlg( this, &greetPlugin, (mShowLockDateTime)?mlockDateTime:TQDateTime()); - int ret = execDialog( &passDlg ); - hideVkbd(); - - if (mForceReject == true) { - ret = TQDialog::Rejected; - } - mForceReject = false; - - XWindowAttributes rootAttr; - XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), - tqt_xscreen()), &rootAttr); - if(( rootAttr.your_event_mask & SubstructureNotifyMask ) == 0 ) - { - kdWarning() << "ERROR: Something removed SubstructureNotifyMask from the root window!!!" << endl; - XSelectInput( tqt_xdisplay(), tqt_xrootwin(), - SubstructureNotifyMask | rootAttr.your_event_mask ); - } - - return ret == TQDialog::Accepted; - } - else { - return 0; - } + if (!mDialogs.isEmpty()) { + // Another dialog is already shown + // Abort! + return 0; + } + if (mInfoMessageDisplayed == false) { + if (mAutoLogout) { + killTimer(mAutoLogoutTimerId); + } + + // Make sure we never launch the SAK or login dialog if windows are being closed down + // Otherwise we can get stuck in an irrecoverable state where any attempt to show the login screen is instantly aborted + if (mClosingWindows) { + return 0; + } + + if (trinity_desktop_lock_use_sak) { + // Verify SAK operational status + TDEProcess* checkSAKProcess = new TDEProcess; + *checkSAKProcess << "tdmtsak" << "check"; + checkSAKProcess->start(TDEProcess::Block, TDEProcess::NoCommunication); + int retcode = checkSAKProcess->exitStatus(); + delete checkSAKProcess; + if (retcode != 0) { + trinity_desktop_lock_use_sak = false; + } + } + + if (trinity_desktop_lock_use_sak) { + // Wait for SAK press before continuing... + SAKDlg inDlg( this ); + execDialog( &inDlg ); + if (mClosingWindows) { + return 0; + } + } + + showVkbd(); + PasswordDlg passDlg( this, &greetPlugin, (mShowLockDateTime)?mlockDateTime:TQDateTime()); + int ret = execDialog( &passDlg ); + hideVkbd(); + + if (mForceReject == true) { + ret = TQDialog::Rejected; + } + mForceReject = false; + + XWindowAttributes rootAttr; + XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), + tqt_xscreen()), &rootAttr); + if(( rootAttr.your_event_mask & SubstructureNotifyMask ) == 0 ) { + kdWarning() << "ERROR: Something removed SubstructureNotifyMask from the root window!!!" << endl; + XSelectInput( tqt_xdisplay(), tqt_xrootwin(), + SubstructureNotifyMask | rootAttr.your_event_mask ); + } + + return ret == TQDialog::Accepted; + } + else { + return 0; + } } static void fakeFocusIn( WId window ) { - // We have keyboard grab, so this application will - // get keyboard events even without having focus. - // Fake FocusIn to make Qt realize it has the active - // window, so that it will correctly show cursor in the dialog. - XEvent ev; - memset(&ev, 0, sizeof(ev)); - ev.xfocus.display = tqt_xdisplay(); - ev.xfocus.type = FocusIn; - ev.xfocus.window = window; - ev.xfocus.mode = NotifyNormal; - ev.xfocus.detail = NotifyAncestor; - XSendEvent( tqt_xdisplay(), window, False, NoEventMask, &ev ); + // We have keyboard grab, so this application will + // get keyboard events even without having focus. + // Fake FocusIn to make Qt realize it has the active + // window, so that it will correctly show cursor in the dialog. + XEvent ev; + memset(&ev, 0, sizeof(ev)); + ev.xfocus.display = tqt_xdisplay(); + ev.xfocus.type = FocusIn; + ev.xfocus.window = window; + ev.xfocus.mode = NotifyNormal; + ev.xfocus.detail = NotifyAncestor; + XSendEvent( tqt_xdisplay(), window, False, NoEventMask, &ev ); } void LockProcess::resumeUnforced() { - resume( false ); + resume( false ); } int LockProcess::execDialog( TQDialog *dlg ) { - currentDialog=dlg; - dlg->adjustSize(); - - TQRect rect = dlg->geometry(); - rect.moveCenter(TDEGlobalSettings::desktopGeometry(TQCursor::pos()).center()); - dlg->move( rect.topLeft() ); - - if (mDialogs.isEmpty()) - { - suspend(); - XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqarrowCursor).handle(), CurrentTime); - } - mDialogs.prepend( dlg ); - fakeFocusIn( dlg->winId()); - if (trinity_desktop_lock_use_system_modal_dialogs) { - if (backingPixmap.isNull()) { - setGeometry(0, 0, mRootWidth, mRootHeight); - erase(); - } - else { - bitBlt(this, 0, 0, &backingPixmap); - } - saverReadyIfNeeded(); - } - // dlg->exec may generate BadMatch errors, so make sure they are silently ignored - int (*oldHandler)(Display *, XErrorEvent *); - oldHandler = XSetErrorHandler(ignoreXError); - int rt = dlg->exec(); - XSetErrorHandler(oldHandler); - while (mDialogControlLock == true) usleep(100000); - currentDialog = NULL; - mDialogs.remove( dlg ); - if( mDialogs.isEmpty() ) { - HANDLE cursorHandle; - if (mHackActive) { - cursorHandle = TQCursor(tqblankCursor).handle(); - } - else { - cursorHandle = TQCursor(tqbusyCursor).handle(); - } - XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, cursorHandle, CurrentTime); - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Slight delay before screensaver resume to allow the dialog window to fully disappear - if (hackResumeTimer == NULL) { - hackResumeTimer = new TQTimer( this ); - connect( hackResumeTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(resumeUnforced()) ); - } - if (mResizingDesktopLock == false) { - hackResumeTimer->start( 10, TRUE ); - } - } - else { - resume( false ); - } - } else { - fakeFocusIn( mDialogs.first()->winId()); - currentDialog = dynamic_cast<TQDialog*>(mDialogs.first()); - } - return rt; + currentDialog=dlg; + dlg->adjustSize(); + + TQRect rect = dlg->geometry(); + rect.moveCenter(TDEGlobalSettings::desktopGeometry(TQCursor::pos()).center()); + dlg->move( rect.topLeft() ); + + if (mDialogs.isEmpty()) { + suspend(); + XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqarrowCursor).handle(), CurrentTime); + } + mDialogs.prepend( dlg ); + fakeFocusIn( dlg->winId()); + if (trinity_desktop_lock_use_system_modal_dialogs) { + if (backingPixmap.isNull()) { + setGeometry(0, 0, mRootWidth, mRootHeight); + erase(); + } + else { + bitBlt(this, 0, 0, &backingPixmap); + } + saverReadyIfNeeded(); + } + // dlg->exec may generate BadMatch errors, so make sure they are silently ignored + int (*oldHandler)(Display *, XErrorEvent *); + oldHandler = XSetErrorHandler(ignoreXError); + int rt = dlg->exec(); + XSetErrorHandler(oldHandler); + while (mDialogControlLock == true) { + usleep(100000); + } + currentDialog = NULL; + mDialogs.remove( dlg ); + if( mDialogs.isEmpty() ) { + HANDLE cursorHandle; + if (mHackActive) { + cursorHandle = TQCursor(tqblankCursor).handle(); + } + else { + cursorHandle = TQCursor(tqbusyCursor).handle(); + } + XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, cursorHandle, CurrentTime); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Slight delay before screensaver resume to allow the dialog window to fully disappear + if (hackResumeTimer == NULL) { + hackResumeTimer = new TQTimer( this ); + connect( hackResumeTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(resumeUnforced()) ); + } + if (mResizingDesktopLock == false) { + hackResumeTimer->start( 10, TRUE ); + } + } + else { + resume( false ); + } + } + else { + fakeFocusIn( mDialogs.first()->winId()); + currentDialog = dynamic_cast<TQDialog*>(mDialogs.first()); + } + return rt; } void LockProcess::slotForcePaintBackground() @@ -2096,36 +2096,38 @@ void LockProcess::slotPaintBackground(const TQPixmap &rpm) void LockProcess::preparePopup() { - TQWidget *dlg = (TQWidget *)sender(); - mDialogs.prepend( dlg ); - fakeFocusIn( dlg->winId() ); + TQWidget *dlg = (TQWidget *)sender(); + mDialogs.prepend( dlg ); + fakeFocusIn( dlg->winId() ); } void LockProcess::cleanupPopup() { - TQWidget *dlg = (TQWidget *)sender(); - mDialogs.remove( dlg ); - if ( mDialogs.isEmpty() ) { - fakeFocusIn( mDialogs.first()->winId() ); - } + TQWidget *dlg = (TQWidget *)sender(); + mDialogs.remove( dlg ); + if ( mDialogs.isEmpty() ) { + fakeFocusIn( mDialogs.first()->winId() ); + } } void LockProcess::doFunctionKeyBroadcast() { - // Provide a clean, pretty display switch by hiding the password dialog here - // This does NOT work with the SAK or system modal dialogs! - if ((!trinity_desktop_lock_use_system_modal_dialogs) && (!trinity_desktop_lock_use_sak)) { - mBusy=true; - TQTimer::singleShot(1000, this, TQT_SLOT(slotDeadTimePassed())); - if (mkeyCode == XKeysymToKeycode(tqt_xdisplay(), XF86XK_Display)) { - while (mDialogControlLock == true) usleep(100000); - mDialogControlLock = true; - currentDialog->close(); // DO NOT use closeCurrentWindow() here! - mDialogControlLock = false; - } - } - - DCOPRef ref( "*", "MainApplication-Interface"); - ref.send("sendFakeKey", DCOPArg(mkeyCode , "unsigned int")); + // Provide a clean, pretty display switch by hiding the password dialog here + // This does NOT work with the SAK or system modal dialogs! + if ((!trinity_desktop_lock_use_system_modal_dialogs) && (!trinity_desktop_lock_use_sak)) { + mBusy=true; + TQTimer::singleShot(1000, this, TQT_SLOT(slotDeadTimePassed())); + if (mkeyCode == XKeysymToKeycode(tqt_xdisplay(), XF86XK_Display)) { + while (mDialogControlLock == true) { + usleep(100000); + } + mDialogControlLock = true; + currentDialog->close(); // DO NOT use closeCurrentWindow() here! + mDialogControlLock = false; + } + } + + DCOPRef ref( "*", "MainApplication-Interface"); + ref.send("sendFakeKey", DCOPArg(mkeyCode , "unsigned int")); } //--------------------------------------------------------------------------- @@ -2134,203 +2136,203 @@ void LockProcess::doFunctionKeyBroadcast() { // bool LockProcess::x11Event(XEvent *event) { - // Allow certain very specific keypresses through - // Key: Reason: - // XF86Display You need to be able to see the screen when unlocking your computer - // XF86AudioMute Would be nice to be able to shut your computer up in an emergency while it is locked - // XF86AudioRaiseVolume Ditto - // XF86AudioLowerVolume Ditto - // XF86XK_PowerOff If someone has access to the power button, they can hard power off the machine anyway - // XF86XK_Sleep Ditto - // XF86XK_Suspend Ditto - // XF86XK_Hibernate Ditto - - //if ((event->type == KeyPress) || (event->type == KeyRelease)) { - if (event->type == KeyPress) { - // Multimedia keys - if ((event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_Display)) || \ - (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_AudioMute)) || \ - (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_AudioRaiseVolume)) || \ - (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_AudioLowerVolume))) { - mkeyCode = event->xkey.keycode; - TQTimer::singleShot( 100, this, TQT_SLOT(doFunctionKeyBroadcast()) ); - return true; - } - // ACPI power keys - if ((event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_PowerOff)) || \ - (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_Sleep)) || \ - (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_Suspend)) || \ - (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_Hibernate))) { - mkeyCode = event->xkey.keycode; - TQTimer::singleShot( 100, this, TQT_SLOT(doFunctionKeyBroadcast()) ); - return true; - } - } - - switch (event->type) - { - case ButtonPress: - case MotionNotify: - case ButtonRelease: - if( forwardVkbdEvent( event )) - return true; // filter out - // fall through - case KeyPress: - if ((mHackDelayStartupTimer) && (mHackDelayStartupTimer->isActive())) { - if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); - } - if (mBusy || !mDialogs.isEmpty()) - break; - mBusy = true; - if (trinity_desktop_lock_delay_screensaver_start) { - if (mLocked) { - ENABLE_CONTINUOUS_LOCKDLG_DISPLAY - if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); - } - if ((!mLocked) && (!mInSecureDialog)) - { - stopSaver(); - kapp->quit(); - } - if (mAutoLogout) // we need to restart the auto logout countdown - { - killTimer(mAutoLogoutTimerId); - mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout); - } - } - else { - if (!mLocked || checkPass()) - { - mClosingWindows = true; - stopSaver(); - kapp->quit(); - } - else if (mAutoLogout) // we need to restart the auto logout countdown - { - killTimer(mAutoLogoutTimerId); - mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout); - } - } - mBusy = false; - return true; - - case VisibilityNotify: - if( event->xvisibility.window == winId()) - { // mVisibility == false means the screensaver is not visible at all - // e.g. when switched to text console - mVisibility = !(event->xvisibility.state == VisibilityFullyObscured); - if(!mVisibility) { - mSuspendTimer.start(2000, true); - } - else - { - mSuspendTimer.stop(); - if (mResizingDesktopLock == false) { - if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced && trinity_desktop_lock_use_system_modal_dialogs) { - // Do nothing + // Allow certain very specific keypresses through + // Key: Reason: + // XF86Display You need to be able to see the screen when unlocking your computer + // XF86AudioMute Would be nice to be able to shut your computer up in an emergency while it is locked + // XF86AudioRaiseVolume Ditto + // XF86AudioLowerVolume Ditto + // XF86XK_PowerOff If someone has access to the power button, they can hard power off the machine anyway + // XF86XK_Sleep Ditto + // XF86XK_Suspend Ditto + // XF86XK_Hibernate Ditto + + //if ((event->type == KeyPress) || (event->type == KeyRelease)) { + if (event->type == KeyPress) { + // Multimedia keys + if ((event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_Display)) || \ + (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_AudioMute)) || \ + (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_AudioRaiseVolume)) || \ + (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_AudioLowerVolume))) { + mkeyCode = event->xkey.keycode; + TQTimer::singleShot( 100, this, TQT_SLOT(doFunctionKeyBroadcast()) ); + return true; + } + // ACPI power keys + if ((event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_PowerOff)) || \ + (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_Sleep)) || \ + (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_Suspend)) || \ + (event->xkey.keycode == XKeysymToKeycode(event->xkey.display, XF86XK_Hibernate))) { + mkeyCode = event->xkey.keycode; + TQTimer::singleShot( 100, this, TQT_SLOT(doFunctionKeyBroadcast()) ); + return true; + } + } + + switch (event->type) + { + case ButtonPress: + case MotionNotify: + case ButtonRelease: + if( forwardVkbdEvent( event )) { + return true; // filter out + } + // fall through + case KeyPress: + if ((mHackDelayStartupTimer) && (mHackDelayStartupTimer->isActive())) { + if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); + } + if (mBusy || !mDialogs.isEmpty()) { + break; + } + mBusy = true; + if (trinity_desktop_lock_delay_screensaver_start) { + if (mLocked) { + ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (mHackStartupEnabled) { + mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); + } + } + if ((!mLocked) && (!mInSecureDialog)) { + stopSaver(); + kapp->quit(); + } + if (mAutoLogout) { + // we need to restart the auto logout countdown + killTimer(mAutoLogoutTimerId); + mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout); + } } else { - if (mHackStartupEnabled == true) { - resume( false ); + if (!mLocked || checkPass()) { + mClosingWindows = true; + stopSaver(); + kapp->quit(); + } + else if (mAutoLogout) { + // we need to restart the auto logout countdown + killTimer(mAutoLogoutTimerId); + mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout); + } + } + mBusy = false; + return true; + + case VisibilityNotify: + if( event->xvisibility.window == winId()) { + // mVisibility == false means the screensaver is not visible at all + // e.g. when switched to text console + mVisibility = !(event->xvisibility.state == VisibilityFullyObscured); + if(!mVisibility) { + mSuspendTimer.start(2000, true); } else { - if (trinity_desktop_lock_use_system_modal_dialogs == true) { - ENABLE_CONTINUOUS_LOCKDLG_DISPLAY - if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); - } - else { - resume( false ); + mSuspendTimer.stop(); + if (mResizingDesktopLock == false) { + if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced && trinity_desktop_lock_use_system_modal_dialogs) { + // Do nothing + } + else { + if (mHackStartupEnabled == true) { + resume( false ); + } + else { + if (trinity_desktop_lock_use_system_modal_dialogs == true) { + ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); + } + else { + resume( false ); + } + } + } } } + if (event->xvisibility.state != VisibilityUnobscured) { + stayOnTop(); + } } - } - } - if (event->xvisibility.state != VisibilityUnobscured) { - stayOnTop(); - } - } - break; - - case ConfigureNotify: // from SubstructureNotifyMask on the root window - if(event->xconfigure.event == tqt_xrootwin()) { - stayOnTop(); - } - for( TQValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin(); - it != mVkbdWindows.end(); - ++it ) { - if( (*it).id == event->xconfigure.window ) { - (*it).rect = TQRect( event->xconfigure.x, event->xconfigure.y, - event->xconfigure.width, event->xconfigure.height ); - break; - } - } - break; - case MapNotify: // from SubstructureNotifyMask on the root window - windowAdded( event->xmap.window, false ); - if( event->xmap.event == tqt_xrootwin()) - stayOnTop(); - break; - case DestroyNotify: - for( TQValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin(); - it != mVkbdWindows.end(); - ++it ) - if( (*it).id == event->xdestroywindow.window ) { - mVkbdWindows.remove( it ); - break; - } - break; - } - - // We have grab with the grab window being the root window. - // This results in key events being sent to the root window, - // but they should be sent to the dialog if it's visible. - // It could be solved by setFocus() call, but that would mess - // the focus after this process exits. - // Qt seems to be quite hard to persuade to redirect the event, - // so let's simply dupe it with correct destination window, - // and ignore the original one. - if(!mDialogs.isEmpty() && ( event->type == KeyPress || event->type == KeyRelease) - && event->xkey.window != mDialogs.first()->winId()) - { - XEvent ev2 = *event; - ev2.xkey.window = ev2.xkey.subwindow = mDialogs.first()->winId(); - tqApp->x11ProcessEvent( &ev2 ); - return true; - } - - return false; + break; + + case ConfigureNotify: // from SubstructureNotifyMask on the root window + if(event->xconfigure.event == tqt_xrootwin()) { + stayOnTop(); + } + for( TQValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin(); + it != mVkbdWindows.end(); + ++it ) { + if( (*it).id == event->xconfigure.window ) { + (*it).rect = TQRect( event->xconfigure.x, event->xconfigure.y, + event->xconfigure.width, event->xconfigure.height ); + break; + } + } + break; + case MapNotify: // from SubstructureNotifyMask on the root window + windowAdded( event->xmap.window, false ); + if( event->xmap.event == tqt_xrootwin()) { + stayOnTop(); + } + break; + case DestroyNotify: + for( TQValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin(); it != mVkbdWindows.end(); ++it ) { + if( (*it).id == event->xdestroywindow.window ) { + mVkbdWindows.remove( it ); + break; + } + } + break; + } + + // We have grab with the grab window being the root window. + // This results in key events being sent to the root window, + // but they should be sent to the dialog if it's visible. + // It could be solved by setFocus() call, but that would mess + // the focus after this process exits. + // Qt seems to be quite hard to persuade to redirect the event, + // so let's simply dupe it with correct destination window, + // and ignore the original one. + if(!mDialogs.isEmpty() && ( event->type == KeyPress || event->type == KeyRelease) + && event->xkey.window != mDialogs.first()->winId()) { + XEvent ev2 = *event; + ev2.xkey.window = ev2.xkey.subwindow = mDialogs.first()->winId(); + tqApp->x11ProcessEvent( &ev2 ); + return true; + } + + return false; } void LockProcess::stayOnTop() { - if(!mDialogs.isEmpty() || !mVkbdWindows.isEmpty()) - { - // this restacking is written in a way so that - // if the stacking positions actually don't change, - // all restacking operations will be no-op, - // and no ConfigureNotify will be generated, - // thus avoiding possible infinite loops - if( !mVkbdWindows.isEmpty()) - XRaiseWindow( tqt_xdisplay(), mVkbdWindows.first().id ); - else - XRaiseWindow( tqt_xdisplay(), mDialogs.first()->winId()); // raise topmost - // and stack others below it - Window* stack = new Window[ mDialogs.count() + mVkbdWindows.count() + 1 ]; - int count = 0; - for( TQValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin(); - it != mVkbdWindows.end(); - ++it ) - stack[ count++ ] = (*it).id; - for( TQValueList< TQWidget* >::ConstIterator it = mDialogs.begin(); - it != mDialogs.end(); - ++it ) - stack[ count++ ] = (*it)->winId(); - stack[ count++ ] = winId(); - XRestackWindows( x11Display(), stack, count ); - delete[] stack; - } - else - XRaiseWindow(tqt_xdisplay(), winId()); + if(!mDialogs.isEmpty() || !mVkbdWindows.isEmpty()) { + // this restacking is written in a way so that + // if the stacking positions actually don't change, + // all restacking operations will be no-op, + // and no ConfigureNotify will be generated, + // thus avoiding possible infinite loops + if( !mVkbdWindows.isEmpty()) { + XRaiseWindow( tqt_xdisplay(), mVkbdWindows.first().id ); + } + else { + XRaiseWindow( tqt_xdisplay(), mDialogs.first()->winId()); // raise topmost + } + // and stack others below it + Window* stack = new Window[ mDialogs.count() + mVkbdWindows.count() + 1 ]; + int count = 0; + for( TQValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin(); it != mVkbdWindows.end(); ++it ) { + stack[ count++ ] = (*it).id; + } + for( TQValueList< TQWidget* >::ConstIterator it = mDialogs.begin(); it != mDialogs.end(); ++it ) { + stack[ count++ ] = (*it)->winId(); + } + stack[ count++ ] = winId(); + XRestackWindows( x11Display(), stack, count ); + delete[] stack; + } + else { + XRaiseWindow(tqt_xdisplay(), winId()); + } } void LockProcess::checkDPMSActive() @@ -2361,233 +2363,245 @@ void LockProcess::checkDPMSActive() static enum { Unknown, Yes, No } can_do_xf86_lock = Unknown; void LockProcess::lockXF86() { - if( can_do_xf86_lock == Unknown ) - { - int major, minor; - if( XF86MiscQueryVersion( tqt_xdisplay(), &major, &minor ) - && major >= 0 && minor >= 5 ) - can_do_xf86_lock = Yes; - else - can_do_xf86_lock = No; - } - if( can_do_xf86_lock != Yes ) - return; - if( mRestoreXF86Lock ) - return; - if( XF86MiscSetGrabKeysState( tqt_xdisplay(), False ) != MiscExtGrabStateSuccess ) - return; - // success - mRestoreXF86Lock = true; + if( can_do_xf86_lock == Unknown ) { + int major, minor; + if( XF86MiscQueryVersion( tqt_xdisplay(), &major, &minor ) && major >= 0 && minor >= 5 ) { + can_do_xf86_lock = Yes; + } + else { + can_do_xf86_lock = No; + } + } + if( can_do_xf86_lock != Yes ) { + return; + } + if( mRestoreXF86Lock ) { + return; + } + if( XF86MiscSetGrabKeysState( tqt_xdisplay(), False ) != MiscExtGrabStateSuccess ) { + return; + } + // success + mRestoreXF86Lock = true; } void LockProcess::unlockXF86() { - if( can_do_xf86_lock != Yes ) - return; - if( !mRestoreXF86Lock ) - return; - XF86MiscSetGrabKeysState( tqt_xdisplay(), True ); - mRestoreXF86Lock = false; + if( can_do_xf86_lock != Yes ) { + return; + } + if( !mRestoreXF86Lock ) { + return; + } + XF86MiscSetGrabKeysState( tqt_xdisplay(), True ); + mRestoreXF86Lock = false; } #else void LockProcess::lockXF86() { + // } void LockProcess::unlockXF86() { + // } #endif void LockProcess::msgBox( TQMessageBox::Icon type, const TQString &txt ) { - TQDialog box( 0, "messagebox", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM)) ); - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - XChangeProperty(tqt_xdisplay(), box.winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - box.setCaption(i18n("Authentication Subsystem Notice")); - TQFrame *winFrame = new TQFrame( &box ); - if (trinity_desktop_lock_use_system_modal_dialogs) - winFrame->setFrameStyle( TQFrame::NoFrame ); - else - winFrame->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised ); - winFrame->setLineWidth( 2 ); - TQLabel *label1 = new TQLabel( winFrame ); - label1->setPixmap( TQMessageBox::standardIcon( type ) ); - TQLabel *label2 = new TQLabel( txt, winFrame ); - KPushButton *button = new KPushButton( KStdGuiItem::ok(), winFrame ); - button->setDefault( true ); - button->setSizePolicy( TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred ) ); - connect( button, TQT_SIGNAL( clicked() ), &box, TQT_SLOT( accept() ) ); - - TQVBoxLayout *vbox = new TQVBoxLayout( &box ); - vbox->addWidget( winFrame ); - TQGridLayout *grid = new TQGridLayout( winFrame, 2, 2, 10 ); - grid->addWidget( label1, 0, 0, Qt::AlignCenter ); - grid->addWidget( label2, 0, 1, Qt::AlignCenter ); - grid->addMultiCellWidget( button, 1,1, 0,1, Qt::AlignCenter ); - - execDialog( &box ); + TQDialog box( 0, "messagebox", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM)) ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + XChangeProperty(tqt_xdisplay(), box.winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + box.setCaption(i18n("Authentication Subsystem Notice")); + TQFrame *winFrame = new TQFrame( &box ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + winFrame->setFrameStyle( TQFrame::NoFrame ); + } + else { + winFrame->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised ); + } + winFrame->setLineWidth( 2 ); + TQLabel *label1 = new TQLabel( winFrame ); + label1->setPixmap( TQMessageBox::standardIcon( type ) ); + TQLabel *label2 = new TQLabel( txt, winFrame ); + KPushButton *button = new KPushButton( KStdGuiItem::ok(), winFrame ); + button->setDefault( true ); + button->setSizePolicy( TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred ) ); + connect( button, TQT_SIGNAL( clicked() ), &box, TQT_SLOT( accept() ) ); + + TQVBoxLayout *vbox = new TQVBoxLayout( &box ); + vbox->addWidget( winFrame ); + TQGridLayout *grid = new TQGridLayout( winFrame, 2, 2, 10 ); + grid->addWidget( label1, 0, 0, Qt::AlignCenter ); + grid->addWidget( label2, 0, 1, Qt::AlignCenter ); + grid->addMultiCellWidget( button, 1,1, 0,1, Qt::AlignCenter ); + + execDialog( &box ); } static int run_vkbd = -1; void LockProcess::showVkbd() { - if( run_vkbd == - 1 ) { + if( run_vkbd == - 1 ) { #ifdef WITH_HAL - int status = system( "hal-find-by-property --key system.formfactor.subtype --string tabletpc" ); -// status = 0; // enable for testing - run_vkbd = ( WIFEXITED( status ) && WEXITSTATUS( status ) == 0 - && !TDEStandardDirs::findExe( "xvkbd" ).isEmpty()) ? 1 : 0; + int status = system( "hal-find-by-property --key system.formfactor.subtype --string tabletpc" ); +// status = 0; // enable for testing + run_vkbd = ( WIFEXITED( status ) && WEXITSTATUS( status ) == 0 && !TDEStandardDirs::findExe( "xvkbd" ).isEmpty()) ? 1 : 0; #else // WITH_HAL - run_vkbd = (!TDEStandardDirs::findExe( "xvkbd" ).isEmpty()); + run_vkbd = (!TDEStandardDirs::findExe( "xvkbd" ).isEmpty()); #endif // WITH_HAL - } - if( run_vkbd ) { - mVkbdWindows.clear(); - mVkbdLastEventWindow = None; - mKWinModule = new KWinModule( NULL, KWinModule::INFO_WINDOWS ); - connect( mKWinModule, TQT_SIGNAL( windowAdded( WId )), TQT_SLOT( windowAdded( WId ))); - mVkbdProcess = new TDEProcess; - *mVkbdProcess << "xvkbd" << "-compact" << "-geometry" << "-0-0" << "-xdm"; - mVkbdProcess->start(); - } + } + if( run_vkbd ) { + mVkbdWindows.clear(); + mVkbdLastEventWindow = None; + mKWinModule = new KWinModule( NULL, KWinModule::INFO_WINDOWS ); + connect( mKWinModule, TQT_SIGNAL( windowAdded( WId )), TQT_SLOT( windowAdded( WId ))); + mVkbdProcess = new TDEProcess; + *mVkbdProcess << "xvkbd" << "-compact" << "-geometry" << "-0-0" << "-xdm"; + mVkbdProcess->start(); + } } void LockProcess::hideVkbd() { - if( mVkbdProcess != NULL ) { - mVkbdProcess->kill(); - delete mVkbdProcess; - mVkbdProcess = NULL; - delete mKWinModule; - mKWinModule = NULL; - mVkbdWindows.clear(); - } + if( mVkbdProcess != NULL ) { + mVkbdProcess->kill(); + delete mVkbdProcess; + mVkbdProcess = NULL; + delete mKWinModule; + mKWinModule = NULL; + mVkbdWindows.clear(); + } } void LockProcess::windowAdded( WId w ) { - windowAdded( w, true ); + windowAdded( w, true ); } void LockProcess::windowAdded( WId w, bool managed ) { - // KWin::windowInfo may generate BadWindow errors, so make sure they are silently ignored - int (*oldHandler)(Display *, XErrorEvent *); - oldHandler = XSetErrorHandler(ignoreXError); - KWin::WindowInfo info = KWin::windowInfo( w, 0, NET::WM2WindowClass ); - XSetErrorHandler(oldHandler); - - if( info.windowClassClass().lower() != "xvkbd" ) - return; - // Unmanaged windows (i.e. popups) don't currently work anyway, since they - // don't have WM_CLASS set anyway. I could perhaps try tricks with X id - // ranges if really needed. - if( managed ) { - // withdraw the window, wait for it to be withdrawn, reparent it directly - // to root at the right position - XWithdrawWindow( tqt_xdisplay(), w, tqt_xscreen()); - for(;;) { - Atom type; - int format; - unsigned long length, after; - unsigned char *data; - int r = XGetWindowProperty( tqt_xdisplay(), w, tqt_wm_state, 0, 2, - false, AnyPropertyType, &type, &format, - &length, &after, &data ); - bool withdrawn = true; - if ( r == Success && data && format == 32 ) { - TQ_UINT32 *wstate = (TQ_UINT32*)data; - withdrawn = (*wstate == WithdrawnState ); - XFree( (char *)data ); - } - if( withdrawn ) - break; - } - } - XSelectInput( tqt_xdisplay(), w, StructureNotifyMask ); - XWindowAttributes attr_geom; - if( !XGetWindowAttributes( tqt_xdisplay(), w, &attr_geom )) - return; - int x = XDisplayWidth( tqt_xdisplay(), tqt_xscreen()) - attr_geom.width; - int y = XDisplayHeight( tqt_xdisplay(), tqt_xscreen()) - attr_geom.height; - if( managed ) { - XSetWindowAttributes attr; - if (!trinity_desktop_lock_use_system_modal_dialogs) { - attr.override_redirect = True; - XChangeWindowAttributes( tqt_xdisplay(), w, CWOverrideRedirect, &attr ); - } - XReparentWindow( tqt_xdisplay(), w, tqt_xrootwin(), x, y ); - XMapWindow( tqt_xdisplay(), w ); - } - VkbdWindow data; - data.id = w; - data.rect = TQRect( x, y, attr_geom.width, attr_geom.height ); - mVkbdWindows.prepend( data ); + // KWin::windowInfo may generate BadWindow errors, so make sure they are silently ignored + int (*oldHandler)(Display *, XErrorEvent *); + oldHandler = XSetErrorHandler(ignoreXError); + KWin::WindowInfo info = KWin::windowInfo( w, 0, NET::WM2WindowClass ); + XSetErrorHandler(oldHandler); + + if( info.windowClassClass().lower() != "xvkbd" ) { + return; + } + // Unmanaged windows (i.e. popups) don't currently work anyway, since they + // don't have WM_CLASS set anyway. I could perhaps try tricks with X id + // ranges if really needed. + if( managed ) { + // withdraw the window, wait for it to be withdrawn, reparent it directly + // to root at the right position + XWithdrawWindow( tqt_xdisplay(), w, tqt_xscreen()); + for(;;) { + Atom type; + int format; + unsigned long length, after; + unsigned char *data; + int r = XGetWindowProperty( tqt_xdisplay(), w, tqt_wm_state, 0, 2, + false, AnyPropertyType, &type, &format, + &length, &after, &data ); + bool withdrawn = true; + if ( r == Success && data && format == 32 ) { + TQ_UINT32 *wstate = (TQ_UINT32*)data; + withdrawn = (*wstate == WithdrawnState ); + XFree( (char *)data ); + } + if( withdrawn ) { + break; + } + } + } + XSelectInput( tqt_xdisplay(), w, StructureNotifyMask ); + XWindowAttributes attr_geom; + if( !XGetWindowAttributes( tqt_xdisplay(), w, &attr_geom )) { + return; + } + int x = XDisplayWidth( tqt_xdisplay(), tqt_xscreen()) - attr_geom.width; + int y = XDisplayHeight( tqt_xdisplay(), tqt_xscreen()) - attr_geom.height; + if( managed ) { + XSetWindowAttributes attr; + if (!trinity_desktop_lock_use_system_modal_dialogs) { + attr.override_redirect = True; + XChangeWindowAttributes( tqt_xdisplay(), w, CWOverrideRedirect, &attr ); + } + XReparentWindow( tqt_xdisplay(), w, tqt_xrootwin(), x, y ); + XMapWindow( tqt_xdisplay(), w ); + } + VkbdWindow data; + data.id = w; + data.rect = TQRect( x, y, attr_geom.width, attr_geom.height ); + mVkbdWindows.prepend( data ); } bool LockProcess::forwardVkbdEvent( XEvent* event ) { - if( mVkbdProcess == NULL ) - return false; - TQPoint pos; - Time time; - switch( event->type ) - { - case ButtonPress: - case ButtonRelease: - pos = TQPoint( event->xbutton.x, event->xbutton.y ); - time = event->xbutton.time; - break; - case MotionNotify: - pos = TQPoint( event->xmotion.x, event->xmotion.y ); - time = event->xmotion.time; - break; - default: - return false; - } - // vkbd windows are kept topmost, so just find the first one in the position - for( TQValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin(); - it != mVkbdWindows.end(); - ++it ) { - if( TQT_TQRECT_OBJECT((*it).rect).contains( pos )) { - // Find the subwindow where the event should actually go. - // Not exactly cheap in the number of X roundtrips but oh well. - Window window = (*it).id; - Window root, child; - int root_x, root_y, x, y; - unsigned int mask; - for(;;) { - if( !XQueryPointer( tqt_xdisplay(), window, &root, &child, &root_x, &root_y, &x, &y, &mask )) - return false; - if( child == None ) - break; - window = child; - } - switch( event->type ) - { - case ButtonPress: - case ButtonRelease: - event->xbutton.x = x; - event->xbutton.y = y; - event->xbutton.subwindow = None; - break; - case MotionNotify: - event->xmotion.x = x; - event->xmotion.y = y; - event->xmotion.subwindow = None; - break; - } - event->xany.window = window; - sendVkbdFocusInOut( window, time ); - XSendEvent( tqt_xdisplay(), window, False, 0, event ); - return true; - } - } - sendVkbdFocusInOut( None, time ); - return false; + if( mVkbdProcess == NULL ) { + return false; + } + TQPoint pos; + Time time; + switch( event->type ) + { + case ButtonPress: + case ButtonRelease: + pos = TQPoint( event->xbutton.x, event->xbutton.y ); + time = event->xbutton.time; + break; + case MotionNotify: + pos = TQPoint( event->xmotion.x, event->xmotion.y ); + time = event->xmotion.time; + break; + default: + return false; + } + // vkbd windows are kept topmost, so just find the first one in the position + for( TQValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin(); it != mVkbdWindows.end(); ++it ) { + if( TQT_TQRECT_OBJECT((*it).rect).contains( pos )) { + // Find the subwindow where the event should actually go. + // Not exactly cheap in the number of X roundtrips but oh well. + Window window = (*it).id; + Window root, child; + int root_x, root_y, x, y; + unsigned int mask; + for(;;) { + if( !XQueryPointer( tqt_xdisplay(), window, &root, &child, &root_x, &root_y, &x, &y, &mask )) { + return false; + } + if( child == None ) { + break; + } + window = child; + } + switch( event->type ) + { + case ButtonPress: + case ButtonRelease: + event->xbutton.x = x; + event->xbutton.y = y; + event->xbutton.subwindow = None; + break; + case MotionNotify: + event->xmotion.x = x; + event->xmotion.y = y; + event->xmotion.subwindow = None; + break; + } + event->xany.window = window; + sendVkbdFocusInOut( window, time ); + XSendEvent( tqt_xdisplay(), window, False, 0, event ); + return true; + } + } + sendVkbdFocusInOut( None, time ); + return false; } // Fake EnterNotify/LeaveNotify events as the mouse moves. They're not sent by X @@ -2595,47 +2609,48 @@ bool LockProcess::forwardVkbdEvent( XEvent* event ) // not needed otherwise it seems). void LockProcess::sendVkbdFocusInOut( WId window, Time t ) { - if( mVkbdLastEventWindow == window ) - return; - if( mVkbdLastEventWindow != None ) { - XEvent e; - e.xcrossing.type = LeaveNotify; - e.xcrossing.display = tqt_xdisplay(); - e.xcrossing.window = mVkbdLastEventWindow; - e.xcrossing.root = tqt_xrootwin(); - e.xcrossing.subwindow = None; - e.xcrossing.time = t; - e.xcrossing.x = 0; - e.xcrossing.y = 0; - e.xcrossing.x_root = -1; - e.xcrossing.y_root = -1; - e.xcrossing.mode = NotifyNormal; - e.xcrossing.detail = NotifyAncestor; - e.xcrossing.same_screen = True; - e.xcrossing.focus = False; - e.xcrossing.state = 0; - XSendEvent( tqt_xdisplay(), mVkbdLastEventWindow, False, 0, &e ); - } - mVkbdLastEventWindow = window; - if( mVkbdLastEventWindow != None ) { - XEvent e; - e.xcrossing.type = EnterNotify; - e.xcrossing.display = tqt_xdisplay(); - e.xcrossing.window = mVkbdLastEventWindow; - e.xcrossing.root = tqt_xrootwin(); - e.xcrossing.subwindow = None; - e.xcrossing.time = t; - e.xcrossing.x = 0; - e.xcrossing.y = 0; - e.xcrossing.x_root = 0; - e.xcrossing.y_root = 0; - e.xcrossing.mode = NotifyNormal; - e.xcrossing.detail = NotifyAncestor; - e.xcrossing.same_screen = True; - e.xcrossing.focus = False; - e.xcrossing.state = 0; - XSendEvent( tqt_xdisplay(), mVkbdLastEventWindow, False, 0, &e ); - } + if( mVkbdLastEventWindow == window ) { + return; + } + if( mVkbdLastEventWindow != None ) { + XEvent e; + e.xcrossing.type = LeaveNotify; + e.xcrossing.display = tqt_xdisplay(); + e.xcrossing.window = mVkbdLastEventWindow; + e.xcrossing.root = tqt_xrootwin(); + e.xcrossing.subwindow = None; + e.xcrossing.time = t; + e.xcrossing.x = 0; + e.xcrossing.y = 0; + e.xcrossing.x_root = -1; + e.xcrossing.y_root = -1; + e.xcrossing.mode = NotifyNormal; + e.xcrossing.detail = NotifyAncestor; + e.xcrossing.same_screen = True; + e.xcrossing.focus = False; + e.xcrossing.state = 0; + XSendEvent( tqt_xdisplay(), mVkbdLastEventWindow, False, 0, &e ); + } + mVkbdLastEventWindow = window; + if( mVkbdLastEventWindow != None ) { + XEvent e; + e.xcrossing.type = EnterNotify; + e.xcrossing.display = tqt_xdisplay(); + e.xcrossing.window = mVkbdLastEventWindow; + e.xcrossing.root = tqt_xrootwin(); + e.xcrossing.subwindow = None; + e.xcrossing.time = t; + e.xcrossing.x = 0; + e.xcrossing.y = 0; + e.xcrossing.x_root = 0; + e.xcrossing.y_root = 0; + e.xcrossing.mode = NotifyNormal; + e.xcrossing.detail = NotifyAncestor; + e.xcrossing.same_screen = True; + e.xcrossing.focus = False; + e.xcrossing.state = 0; + XSendEvent( tqt_xdisplay(), mVkbdLastEventWindow, False, 0, &e ); + } } void LockProcess::slotMouseActivity(XEvent *event) @@ -2803,6 +2818,101 @@ void LockProcess::processInputPipeCommand(TQString inputcommand) { } } +void LockProcess::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) { + TQString login_name = TQString::null; + X509CertificatePtrList certList = cdevice->cardX509Certificates(); + if (certList.count() > 0) { + KSSLCertificate* card_cert = NULL; + card_cert = KSSLCertificate::fromX509(certList[0]); + TQStringList cert_subject_parts = TQStringList::split("/", card_cert->getSubject(), false); + for (TQStringList::Iterator it = cert_subject_parts.begin(); it != cert_subject_parts.end(); ++it ) { + TQString lcpart = (*it).lower(); + if (lcpart.startsWith("cn=")) { + login_name = lcpart.right(lcpart.length() - strlen("cn=")); + } + } + delete card_cert; + } + + if (login_name != "") { + KUser user; + if (login_name == user.loginName()) { + // Pass login to the PAM stack... + m_loginCardDevice = cdevice; + if (dynamic_cast<SAKDlg*>(currentDialog)) { + dynamic_cast<SAKDlg*>(currentDialog)->closeDialogForced(); + TQTimer::singleShot(0, this, SLOT(signalPassDlgToAttemptCardLogin())); + } + else if (dynamic_cast<SecureDlg*>(currentDialog)) { + dynamic_cast<SecureDlg*>(currentDialog)->closeDialogForced(); + TQTimer::singleShot(0, this, SLOT(signalPassDlgToAttemptCardLogin())); + } + else if (dynamic_cast<PasswordDlg*>(currentDialog)) { + signalPassDlgToAttemptCardLogin(); + } + } + } +} + +void LockProcess::cryptographicCardRemoved(TDECryptographicCardDevice* cdevice) { + PasswordDlg* passDlg = dynamic_cast<PasswordDlg*>(currentDialog); + if (passDlg) { + passDlg->resetCardLogin(); + } + else { + m_loginCardDevice = NULL; + TQTimer::singleShot(0, this, SLOT(signalPassDlgToAttemptCardAbort())); + } +} + +void LockProcess::signalPassDlgToAttemptCardLogin() { + PasswordDlg* passDlg = dynamic_cast<PasswordDlg*>(currentDialog); + if (passDlg && m_loginCardDevice) { + passDlg->attemptCardLogin(); + } + else { + if (currentDialog && m_loginCardDevice) { + // Try again later + TQTimer::singleShot(0, this, SLOT(signalPassDlgToAttemptCardLogin())); + } + } +} + +void LockProcess::signalPassDlgToAttemptCardAbort() { + PasswordDlg* passDlg = dynamic_cast<PasswordDlg*>(currentDialog); + if (passDlg) { + passDlg->resetCardLogin(); + } + else { + if (currentDialog) { + // Try again later + TQTimer::singleShot(0, this, SLOT(signalPassDlgToAttemptCardAbort())); + } + } +} + +void LockProcess::cryptographicCardPinRequested(TQString prompt, TDECryptographicCardDevice* cdevice) { + TQCString password; + const char * pin_entry; + + QueryDlg qryDlg(this); + qryDlg.updateLabel(prompt); + qryDlg.setUnlockIcon(); + mForceReject = false; + execDialog(&qryDlg); + if (mForceReject == false) { + pin_entry = qryDlg.getEntry(); + cdevice->setProvidedPin(pin_entry); + } + else { + cdevice->setProvidedPin(TQString::null); + } +} + +TDECryptographicCardDevice* LockProcess::cryptographicCardDevice() { + return m_loginCardDevice; +} + void LockProcess::fullyOnline() { if (!mFullyOnlineSent) { if (kdesktop_pid > 0) { @@ -2868,15 +2978,15 @@ void ControlPipeHandlerObject::run(void) { mkdir(FIFO_DIR,0644); mknod(fifo_file, S_IFIFO|0644, 0); chmod(fifo_file, 0644); - + mParent->mPipe_fd = open(fifo_file, O_RDONLY | O_NONBLOCK); if (mParent->mPipe_fd > -1) { mParent->mPipeOpen = true; } - + mknod(fifo_file_out, S_IFIFO|0600, 0); chmod(fifo_file_out, 0600); - + mParent->mPipe_fd_out = open(fifo_file_out, O_RDWR | O_NONBLOCK); if (mParent->mPipe_fd_out > -1) { mParent->mPipeOpen_out = true; diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h index 34e3da8e0..4dc2d8bab 100644 --- a/kdesktop/lock/lockprocess.h +++ b/kdesktop/lock/lockprocess.h @@ -1,15 +1,20 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // // Copyright (c) 1999 Martin R. Jones <mjones@kde.org> // Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org> -// Copyright (c) 2010-2013 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> // #ifndef __LOCKENG_H__ #define __LOCKENG_H__ +#include <ksslcertificate.h> + +#include <tdehardwaredevices.h> +#include <tdecryptographiccarddevice.h> + #include <kgreeterplugin.h> #include <kprocess.h> @@ -32,8 +37,8 @@ class KSMModalDialog; class LockProcess; struct GreeterPluginHandle { - KLibrary *library; - kgreeterplugin_info *info; + KLibrary *library; + kgreeterplugin_info *info; }; #define FIFO_DIR "/tmp/tdesocket-global" @@ -57,7 +62,7 @@ class ControlPipeHandlerObject : public TQObject public slots: void run(); void terminateThread(); - + signals: void processCommand(TQString); @@ -75,195 +80,202 @@ class ControlPipeHandlerObject : public TQObject // Screen saver handling process. Handles screensaver window, // starting screensaver hacks, and password entry. // -class LockProcess - : public TQWidget +class LockProcess : public TQWidget { - Q_OBJECT -public: - LockProcess(); - ~LockProcess(); - - void init(bool child_saver = false, bool useBlankOnly = false); - - bool lock(); - - bool defaultSave(); - - bool dontLock(); - - bool runSecureDialog(); - bool inSecureDialog(); - - void setChildren(TQValueList<int> children) { child_sockets = children; } - void setParent(int fd) { mParent = fd; } - - void msgBox( TQMessageBox::Icon type, const TQString &txt ); - int execDialog( TQDialog* dlg ); - -signals: - void terminateHelperThread(); - -public slots: - void quitSaver(); - void preparePopup(); - void cleanupPopup(); - void desktopResized(); - void doDesktopResizeFinish(); - void doFunctionKeyBroadcast(); - void slotPaintBackground(const TQPixmap &pm); - void slotForcePaintBackground(); - -protected: - virtual bool x11Event(XEvent *); - virtual void timerEvent(TQTimerEvent *); - virtual void resizeEvent(TQResizeEvent *); - -private slots: - void hackExited(TDEProcess *); - void signalPipeSignal(); - bool startLock(); - void suspend(); - void checkDPMSActive(); - void slotDeadTimePassed(); - void windowAdded( WId ); - void resumeUnforced(); - void displayLockDialogIfNeeded(); - void closeDialogAndStartHack(); - bool closeCurrentWindow(); - void repaintRootWindowIfNeeded(); - void startSecureDialog(); - void slotMouseActivity(XEvent *event); - void processInputPipeCommand(TQString command); - -private: - void configure(); - void readSaver(); - void createSaverWindow(); - void hideSaverWindow(); - void saveVRoot(); - void setVRoot(Window win, Window rw); - void removeVRoot(Window win); - void setTransparentBackgroundARGB(); - bool grabKeyboard(); - bool grabMouse(); - bool grabInput(); - void ungrabInput(); - void cantLock(const TQString &reason); - bool startSaver(bool notify_ready = false); - void stopSaver(); - bool startHack(); - void stopHack(); - void setupSignals(); - bool checkPass(); - void stayOnTop(); - void lockXF86(); - void unlockXF86(); - void showVkbd(); - void hideVkbd(); - void saverReady(); - void saverReadyIfNeeded(); - bool forwardVkbdEvent( XEvent* event ); - void sendVkbdFocusInOut( WId window, Time t ); - void windowAdded( WId window, bool managed ); - void resume( bool force ); - static TQVariant getConf(void *ctx, const char *key, const TQVariant &dflt); - void generateBackingImages(); - void fullyOnline(); - - bool mLocked; - int mLockGrace; - int mPriority; - bool mBusy; - TDEProcess mHackProc; - int mRootWidth; - int mRootHeight; - TQString mSaverExec; - TQString mSaver; - bool mOpenGLVisual; - bool child_saver; - TQValueList<int> child_sockets; - int mParent; - bool mUseBlankOnly; - bool mShowLockDateTime; - bool mSuspended; - TQTimer mSuspendTimer; - bool mVisibility; - TQTimer mCheckDPMS; - TQValueStack< TQWidget* > mDialogs; - bool mRestoreXF86Lock; - bool mForbidden; - TQStringList mPlugins, mPluginOptions; - TQString mMethod; - GreeterPluginHandle greetPlugin; - TQPixmap mSavedScreen; - int mAutoLogoutTimerId; - int mAutoLogoutTimeout; - bool mAutoLogout; - - TQTimer *resizeTimer; - unsigned int mkeyCode; - - TQTimer *hackResumeTimer; - - TDEProcess* mVkbdProcess; - KWinModule* mKWinModule; - struct VkbdWindow - { - WId id; - TQRect rect; - }; - TQValueList< VkbdWindow > mVkbdWindows; - WId mVkbdLastEventWindow; - - bool mPipeOpen; - int mPipe_fd; - bool mPipeOpen_out; - int mPipe_fd_out; - - bool mInfoMessageDisplayed; - bool mDialogControlLock; - bool mForceReject; - TQDialog *currentDialog; - - TQTimer* mEnsureScreenHiddenTimer; - TQTimer* mForceContinualLockDisplayTimer; - TQTimer* mEnsureVRootWindowSecurityTimer; - TQTimer* mHackDelayStartupTimer; - - int mHackDelayStartupTimeout; - bool mHackStartupEnabled; - bool mOverrideHackStartupEnabled; - bool mResizingDesktopLock; - bool mFullyOnlineSent; - - bool mClosingWindows; - bool mInSecureDialog; - bool mHackActive; - - TQPixmap backingPixmap; - KRootPixmap *m_rootPixmap; - int mBackingStartupDelayTimer; - TQPixmap mArgbTransparentBackgroundPixmap; - - KSMModalDialog* m_startupStatusDialog; - - TQDateTime mlockDateTime; - - bool m_mouseDown; - int m_mousePrevX; - int m_mousePrevY; - int m_dialogPrevX; - int m_dialogPrevY; - - bool m_notifyReadyRequested; - - TQWidget* m_maskWidget; - Window m_saverRootWindow; - - ControlPipeHandlerObject* mControlPipeHandler; - TQEventLoopThread* mControlPipeHandlerThread; - - friend class ControlPipeHandlerObject; + Q_OBJECT + + public: + LockProcess(); + ~LockProcess(); + + void init(bool child_saver = false, bool useBlankOnly = false); + + bool lock(); + + bool defaultSave(); + + bool dontLock(); + + bool runSecureDialog(); + bool inSecureDialog(); + + void setChildren(TQValueList<int> children) { child_sockets = children; } + void setParent(int fd) { mParent = fd; } + + void msgBox( TQMessageBox::Icon type, const TQString &txt ); + int execDialog( TQDialog* dlg ); + + TDECryptographicCardDevice* cryptographicCardDevice(); + + signals: + void terminateHelperThread(); + + public slots: + void quitSaver(); + void preparePopup(); + void cleanupPopup(); + void desktopResized(); + void doDesktopResizeFinish(); + void doFunctionKeyBroadcast(); + void slotPaintBackground(const TQPixmap &pm); + void slotForcePaintBackground(); + + protected: + virtual bool x11Event(XEvent *); + virtual void timerEvent(TQTimerEvent *); + virtual void resizeEvent(TQResizeEvent *); + + private slots: + void hackExited(TDEProcess *); + void signalPipeSignal(); + bool startLock(); + void suspend(); + void checkDPMSActive(); + void slotDeadTimePassed(); + void windowAdded( WId ); + void resumeUnforced(); + void displayLockDialogIfNeeded(); + void closeDialogAndStartHack(); + bool closeCurrentWindow(); + void repaintRootWindowIfNeeded(); + void startSecureDialog(); + void slotMouseActivity(XEvent *event); + void processInputPipeCommand(TQString command); + void cryptographicCardInserted(TDECryptographicCardDevice*); + void cryptographicCardRemoved(TDECryptographicCardDevice*); + void cryptographicCardPinRequested(TQString prompt, TDECryptographicCardDevice* cdevice); + void signalPassDlgToAttemptCardLogin(); + void signalPassDlgToAttemptCardAbort(); + + private: + void configure(); + void readSaver(); + void createSaverWindow(); + void hideSaverWindow(); + void saveVRoot(); + void setVRoot(Window win, Window rw); + void removeVRoot(Window win); + void setTransparentBackgroundARGB(); + bool grabKeyboard(); + bool grabMouse(); + bool grabInput(); + void ungrabInput(); + void cantLock(const TQString &reason); + bool startSaver(bool notify_ready = false); + void stopSaver(); + bool startHack(); + void stopHack(); + void setupSignals(); + bool checkPass(); + void stayOnTop(); + void lockXF86(); + void unlockXF86(); + void showVkbd(); + void hideVkbd(); + void saverReady(); + void saverReadyIfNeeded(); + bool forwardVkbdEvent( XEvent* event ); + void sendVkbdFocusInOut( WId window, Time t ); + void windowAdded( WId window, bool managed ); + void resume( bool force ); + static TQVariant getConf(void *ctx, const char *key, const TQVariant &dflt); + void generateBackingImages(); + void fullyOnline(); + + bool mLocked; + int mLockGrace; + int mPriority; + bool mBusy; + TDEProcess mHackProc; + int mRootWidth; + int mRootHeight; + TQString mSaverExec; + TQString mSaver; + bool mOpenGLVisual; + bool child_saver; + TQValueList<int> child_sockets; + int mParent; + bool mUseBlankOnly; + bool mShowLockDateTime; + bool mSuspended; + TQTimer mSuspendTimer; + bool mVisibility; + TQTimer mCheckDPMS; + TQValueStack< TQWidget* > mDialogs; + bool mRestoreXF86Lock; + bool mForbidden; + TQStringList mPlugins, mPluginOptions; + TQString mMethod; + GreeterPluginHandle greetPlugin; + TQPixmap mSavedScreen; + int mAutoLogoutTimerId; + int mAutoLogoutTimeout; + bool mAutoLogout; + + TQTimer *resizeTimer; + unsigned int mkeyCode; + + TQTimer *hackResumeTimer; + + TDEProcess* mVkbdProcess; + KWinModule* mKWinModule; + struct VkbdWindow { + WId id; + TQRect rect; + }; + TQValueList< VkbdWindow > mVkbdWindows; + WId mVkbdLastEventWindow; + + bool mPipeOpen; + int mPipe_fd; + bool mPipeOpen_out; + int mPipe_fd_out; + + bool mInfoMessageDisplayed; + bool mDialogControlLock; + bool mForceReject; + TQDialog *currentDialog; + + TQTimer* mEnsureScreenHiddenTimer; + TQTimer* mForceContinualLockDisplayTimer; + TQTimer* mEnsureVRootWindowSecurityTimer; + TQTimer* mHackDelayStartupTimer; + + int mHackDelayStartupTimeout; + bool mHackStartupEnabled; + bool mOverrideHackStartupEnabled; + bool mResizingDesktopLock; + bool mFullyOnlineSent; + + bool mClosingWindows; + bool mInSecureDialog; + bool mHackActive; + + TQPixmap backingPixmap; + KRootPixmap *m_rootPixmap; + int mBackingStartupDelayTimer; + TQPixmap mArgbTransparentBackgroundPixmap; + + KSMModalDialog* m_startupStatusDialog; + + TQDateTime mlockDateTime; + + bool m_mouseDown; + int m_mousePrevX; + int m_mousePrevY; + int m_dialogPrevX; + int m_dialogPrevY; + + bool m_notifyReadyRequested; + TDECryptographicCardDevice* m_loginCardDevice; + + TQWidget* m_maskWidget; + Window m_saverRootWindow; + + ControlPipeHandlerObject* mControlPipeHandler; + TQEventLoopThread* mControlPipeHandlerThread; + + friend class ControlPipeHandlerObject; }; #endif diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc index c1b1da2f0..871c87a69 100644 --- a/kdesktop/lock/main.cc +++ b/kdesktop/lock/main.cc @@ -1,7 +1,7 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 1999 David Faure Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org> - Copyright (c) 2010-2012 Timothy Pearson <kb9vqf@pearsoncomputing.net> + Copyright (c) 2010-2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -88,462 +88,471 @@ bool trinity_desktop_lock_settings_initialized = FALSE; static void sigusr1_handler(int) { - signalled_forcelock = TRUE; + signalled_forcelock = TRUE; } static void sigusr2_handler(int) { - signalled_dontlock = TRUE; + signalled_dontlock = TRUE; } static void sigusr3_handler(int) { - signalled_securedialog = TRUE; + signalled_securedialog = TRUE; } static void sigusr4_handler(int) { - signalled_blank = TRUE; + signalled_blank = TRUE; } static void sigusr5_handler(int) { - signalled_run = TRUE; + signalled_run = TRUE; } static int trapXErrors(Display *, XErrorEvent *) { - return 0; + return 0; } bool MyApp::x11EventFilter( XEvent *ev ) { - if (ev->type == ButtonPress || ev->type == ButtonRelease || ev->type == MotionNotify) { - emit mouseInteraction(ev); - } - if (ev->type == XKeyPress || ev->type == ButtonPress) { - emit activity(); - } - else if (ev->type == MotionNotify) { - time_t tick = time( 0 ); - if (tick != lastTick) { - lastTick = tick; - emit activity(); - } - } - else if (ev->type == MapNotify) { - // HACK - // Hide all tooltips and notification windows - XMapEvent map_event = ev->xmap; - XWindowAttributes childAttr; - Window childTransient; - if (XGetWindowAttributes(map_event.display, map_event.window, &childAttr) && XGetTransientForHint(map_event.display, map_event.window, &childTransient)) { - if((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) { - if (!trinity_desktop_lock_hidden_window_list.contains(map_event.window)) { - trinity_desktop_lock_hidden_window_list.append(map_event.window); - } - XLowerWindow(map_event.display, map_event.window); - XFlush(map_event.display); - } - } - } - else if (ev->type == VisibilityNotify) { - // HACK - // Hide all tooltips and notification windows - XVisibilityEvent visibility_event = ev->xvisibility; - XWindowAttributes childAttr; - Window childTransient; - if ((visibility_event.state == VisibilityUnobscured) || (visibility_event.state == VisibilityPartiallyObscured)) { - if (XGetWindowAttributes(visibility_event.display, visibility_event.window, &childAttr) && XGetTransientForHint(visibility_event.display, visibility_event.window, &childTransient)) { - if((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) { - if (!trinity_desktop_lock_hidden_window_list.contains(visibility_event.window)) { - trinity_desktop_lock_hidden_window_list.append(visibility_event.window); - } - XLowerWindow(visibility_event.display, visibility_event.window); - XFlush(visibility_event.display); - } - } - } - } - else if (ev->type == CreateNotify) { - // HACK - // Close all tooltips and notification windows - XCreateWindowEvent create_event = ev->xcreatewindow; - XWindowAttributes childAttr; - Window childTransient; - - // XGetWindowAttributes may generate BadWindow errors, so make sure they are silently ignored - int (*oldHandler)(Display *, XErrorEvent *); - oldHandler = XSetErrorHandler(trapXErrors); - if (XGetWindowAttributes(create_event.display, create_event.window, &childAttr) && XGetTransientForHint(create_event.display, create_event.window, &childTransient)) { - if ((childAttr.override_redirect) && (childTransient)) { - if (!trinity_desktop_lock_hidden_window_list.contains(create_event.window)) { - trinity_desktop_lock_hidden_window_list.append(create_event.window); - } - XLowerWindow(create_event.display, create_event.window); - XFlush(create_event.display); - } - } - XSetErrorHandler(oldHandler); - } - else if (ev->type == DestroyNotify) { - XDestroyWindowEvent destroy_event = ev->xdestroywindow; - if (trinity_desktop_lock_hidden_window_list.contains(destroy_event.window)) { - trinity_desktop_lock_hidden_window_list.remove(destroy_event.window); - } - } + if (ev->type == ButtonPress || ev->type == ButtonRelease || ev->type == MotionNotify) { + emit mouseInteraction(ev); + } + if (ev->type == XKeyPress || ev->type == ButtonPress) { + emit activity(); + } + else if (ev->type == MotionNotify) { + time_t tick = time( 0 ); + if (tick != lastTick) { + lastTick = tick; + emit activity(); + } + } + else if (ev->type == MapNotify) { + // HACK + // Hide all tooltips and notification windows + XMapEvent map_event = ev->xmap; + XWindowAttributes childAttr; + Window childTransient; + if (XGetWindowAttributes(map_event.display, map_event.window, &childAttr) && XGetTransientForHint(map_event.display, map_event.window, &childTransient)) { + if((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) { + if (!trinity_desktop_lock_hidden_window_list.contains(map_event.window)) { + trinity_desktop_lock_hidden_window_list.append(map_event.window); + } + XLowerWindow(map_event.display, map_event.window); + XFlush(map_event.display); + } + } + } + else if (ev->type == VisibilityNotify) { + // HACK + // Hide all tooltips and notification windows + XVisibilityEvent visibility_event = ev->xvisibility; + XWindowAttributes childAttr; + Window childTransient; + if ((visibility_event.state == VisibilityUnobscured) || (visibility_event.state == VisibilityPartiallyObscured)) { + if (XGetWindowAttributes(visibility_event.display, visibility_event.window, &childAttr) && XGetTransientForHint(visibility_event.display, visibility_event.window, &childTransient)) { + if((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) { + if (!trinity_desktop_lock_hidden_window_list.contains(visibility_event.window)) { + trinity_desktop_lock_hidden_window_list.append(visibility_event.window); + } + XLowerWindow(visibility_event.display, visibility_event.window); + XFlush(visibility_event.display); + } + } + } + } + else if (ev->type == CreateNotify) { + // HACK + // Close all tooltips and notification windows + XCreateWindowEvent create_event = ev->xcreatewindow; + XWindowAttributes childAttr; + Window childTransient; + + // XGetWindowAttributes may generate BadWindow errors, so make sure they are silently ignored + int (*oldHandler)(Display *, XErrorEvent *); + oldHandler = XSetErrorHandler(trapXErrors); + if (XGetWindowAttributes(create_event.display, create_event.window, &childAttr) && XGetTransientForHint(create_event.display, create_event.window, &childTransient)) { + if ((childAttr.override_redirect) && (childTransient)) { + if (!trinity_desktop_lock_hidden_window_list.contains(create_event.window)) { + trinity_desktop_lock_hidden_window_list.append(create_event.window); + } + XLowerWindow(create_event.display, create_event.window); + XFlush(create_event.display); + } + } + XSetErrorHandler(oldHandler); + } + else if (ev->type == DestroyNotify) { + XDestroyWindowEvent destroy_event = ev->xdestroywindow; + if (trinity_desktop_lock_hidden_window_list.contains(destroy_event.window)) { + trinity_desktop_lock_hidden_window_list.remove(destroy_event.window); + } + } #if 0 - else if (ev->type == CreateNotify) { - // HACK - // Close all tooltips and notification windows - XCreateWindowEvent create_event = ev->xcreatewindow; - XWindowAttributes childAttr; - Window childTransient; - if (XGetWindowAttributes(create_event.display, create_event.window, &childAttr) && XGetTransientForHint(create_event.display, create_event.window, &childTransient)) { - if ((childAttr.override_redirect) && (childTransient)) { - XDestroyWindow(create_event.display, create_event.window); - } - } - } + else if (ev->type == CreateNotify) { + // HACK + // Close all tooltips and notification windows + XCreateWindowEvent create_event = ev->xcreatewindow; + XWindowAttributes childAttr; + Window childTransient; + if (XGetWindowAttributes(create_event.display, create_event.window, &childAttr) && XGetTransientForHint(create_event.display, create_event.window, &childTransient)) { + if ((childAttr.override_redirect) && (childTransient)) { + XDestroyWindow(create_event.display, create_event.window); + } + } + } #endif - return TDEApplication::x11EventFilter( ev ); + return TDEApplication::x11EventFilter( ev ); } static TDECmdLineOptions options[] = { - { "forcelock", I18N_NOOP("Force session locking"), 0 }, - { "dontlock", I18N_NOOP("Only start screensaver"), 0 }, - { "securedialog", I18N_NOOP("Launch the secure dialog"), 0 }, - { "blank", I18N_NOOP("Only use the blank screensaver"), 0 }, - { "internal <pid>", I18N_NOOP("TDE internal command for background process loading"), 0 }, - TDECmdLineLastOption + { "forcelock", I18N_NOOP("Force session locking"), 0 }, + { "dontlock", I18N_NOOP("Only start screensaver"), 0 }, + { "securedialog", I18N_NOOP("Launch the secure dialog"), 0 }, + { "blank", I18N_NOOP("Only use the blank screensaver"), 0 }, + { "internal <pid>", I18N_NOOP("TDE internal command for background process loading"), 0 }, + TDECmdLineLastOption }; void restore_hidden_override_redirect_windows() { - TQXLibWindowList::iterator it; - for (it = trinity_desktop_lock_hidden_window_list.begin(); it != trinity_desktop_lock_hidden_window_list.end(); ++it) { - Window win = *it; - XRaiseWindow(tqt_xdisplay(), win); - } + TQXLibWindowList::iterator it; + for (it = trinity_desktop_lock_hidden_window_list.begin(); it != trinity_desktop_lock_hidden_window_list.end(); ++it) { + Window win = *it; + XRaiseWindow(tqt_xdisplay(), win); + } } // ----------------------------------------------------------------------------- int main( int argc, char **argv ) { - TDELocale::setMainCatalogue("kdesktop"); - - TDECmdLineArgs::init( argc, argv, "kdesktop_lock", I18N_NOOP("KDesktop Locker"), I18N_NOOP("Session Locker for KDesktop"), "2.1" ); - TDECmdLineArgs::addCmdLineOptions( options ); - TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs(); - - putenv(strdup("SESSION_MANAGER=")); - - TDEApplication::disableAutoDcopRegistration(); // not needed - - XSetErrorHandler(trapXErrors); - - MyApp* app = NULL; - - while (1 == 1) { - signalled_forcelock = FALSE; - signalled_dontlock = FALSE; - signalled_securedialog = FALSE; - signalled_blank = FALSE; - signalled_run = FALSE; - - int kdesktop_screen_number = 0; - int starting_screen = 0; - - bool child = false; - int parent_connection = 0; // socket to the parent saver - TQValueList<int> child_sockets; - - if (TDEGlobalSettings::isMultiHead()) - { - Display *dpy = XOpenDisplay(NULL); - if (! dpy) { - fprintf(stderr, - "%s: FATAL ERROR: couldn't open display '%s'\n", - argv[0], XDisplayName(NULL)); - exit(1); - } - - int number_of_screens = ScreenCount(dpy); - starting_screen = kdesktop_screen_number = DefaultScreen(dpy); - int pos; - TQCString display_name = XDisplayString(dpy); - XCloseDisplay(dpy); - kdDebug() << "screen " << number_of_screens << " " << kdesktop_screen_number << " " << display_name << " " << starting_screen << endl; - dpy = 0; - - if ((pos = display_name.findRev('.')) != -1) - display_name.remove(pos, 10); - - TQCString env; - if (number_of_screens != 1) { - for (int i = 0; i < number_of_screens; i++) { - if (i != starting_screen) { - int fd[2]; - if (pipe(fd)) { - perror("pipe"); - break; - } - if (fork() == 0) { - child = true; - kdesktop_screen_number = i; - parent_connection = fd[0]; - // break here because we are the child process, we don't - // want to fork() anymore - break; - } else { - child_sockets.append(fd[1]); - } - } - } - - env.sprintf("DISPLAY=%s.%d", display_name.data(), - kdesktop_screen_number); - kdDebug() << "env " << env << endl; - - if (putenv(strdup(env.data()))) { - fprintf(stderr, - "%s: WARNING: unable to set DISPLAY environment variable\n", - argv[0]); - perror("putenv()"); - } - } - } - - if (!app) { + TDELocale::setMainCatalogue("kdesktop"); + + TDECmdLineArgs::init( argc, argv, "kdesktop_lock", I18N_NOOP("KDesktop Locker"), I18N_NOOP("Session Locker for KDesktop"), "2.1" ); + TDECmdLineArgs::addCmdLineOptions( options ); + TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs(); + + putenv(strdup("SESSION_MANAGER=")); + + TDEApplication::disableAutoDcopRegistration(); // not needed + + XSetErrorHandler(trapXErrors); + + MyApp* app = NULL; + + while (1 == 1) { + sigset_t new_mask; + sigset_t orig_mask; + + // Block reception of all signals in this thread + sigprocmask(SIG_BLOCK, &new_mask, NULL); + + signalled_forcelock = FALSE; + signalled_dontlock = FALSE; + signalled_securedialog = FALSE; + signalled_blank = FALSE; + signalled_run = FALSE; + + int kdesktop_screen_number = 0; + int starting_screen = 0; + + bool child = false; + int parent_connection = 0; // socket to the parent saver + TQValueList<int> child_sockets; + + if (TDEGlobalSettings::isMultiHead()) { + Display *dpy = XOpenDisplay(NULL); + if (! dpy) { + fprintf(stderr, + "%s: FATAL ERROR: couldn't open display '%s'\n", + argv[0], XDisplayName(NULL)); + exit(1); + } + + int number_of_screens = ScreenCount(dpy); + starting_screen = kdesktop_screen_number = DefaultScreen(dpy); + int pos; + TQCString display_name = XDisplayString(dpy); + XCloseDisplay(dpy); + kdDebug() << "screen " << number_of_screens << " " << kdesktop_screen_number << " " << display_name << " " << starting_screen << endl; + dpy = 0; + + if ((pos = display_name.findRev('.')) != -1) { + display_name.remove(pos, 10); + } + + TQCString env; + if (number_of_screens != 1) { + for (int i = 0; i < number_of_screens; i++) { + if (i != starting_screen) { + int fd[2]; + if (pipe(fd)) { + perror("pipe"); + break; + } + if (fork() == 0) { + child = true; + kdesktop_screen_number = i; + parent_connection = fd[0]; + // break here because we are the child process, we don't + // want to fork() anymore + break; + } + else { + child_sockets.append(fd[1]); + } + } + } + + env.sprintf("DISPLAY=%s.%d", display_name.data(), + kdesktop_screen_number); + kdDebug() << "env " << env << endl; + + if (putenv(strdup(env.data()))) { + fprintf(stderr, + "%s: WARNING: unable to set DISPLAY environment variable\n", + argv[0]); + perror("putenv()"); + } + } + } + + if (!app) { #ifdef COMPOSITE - app = new MyApp(TDEApplication::openX11RGBADisplay()); - argb_visual = app->isX11CompositionAvailable(); + app = new MyApp(TDEApplication::openX11RGBADisplay()); + argb_visual = app->isX11CompositionAvailable(); #else - app = new MyApp; + app = new MyApp; #endif - } - - TDELockFile lock(locateLocal("tmp", "kdesktop_lock_lockfile")); - lock.setStaleTime(0); - TDELockFile::LockResult lockRet = lock.lock(); - if (lockRet != TDELockFile::LockOK) { - // Terminate existing (stale) process if needed - int pid; - TQString hostName; - TQString appName; - if (lock.getLockInfo(pid, hostName, appName)) { - // Verify that the pid in question is an instance of kdesktop_lock - int len; - char procpath[PATH_MAX]; - char fullpath[PATH_MAX]; - snprintf(procpath, sizeof(procpath), "/proc/%d/exe", pid); - len = readlink( procpath, fullpath, sizeof(fullpath) ); - if (len >= 0) { - fullpath[len] = 0; - TQFileInfo fileInfo(fullpath); - if (fileInfo.baseName() == "kdesktop_lock") { - // Verify that pid in question is owned by current user before killing it - uid_t current_uid = geteuid(); - - struct stat info; - if (lstat(procpath, &info) == 0) { - if (info.st_uid == current_uid) { - kill(pid, SIGKILL); - } - } - } - } - } - } - - // Force a relock as a stale lockfile or process may have been dealt with above - if (!lock.isLocked()) { - lockRet = lock.lock(TDELockFile::LockNoBlock | TDELockFile::LockForce); - } - - kdDebug() << "app " << kdesktop_screen_number << " " << starting_screen << " " << child << " " << child_sockets.count() << " " << parent_connection << endl; - app->disableSessionManagement(); - TDEGlobal::locale()->insertCatalogue("libdmctl"); - - struct stat st; - KSimpleConfig* tdmconfig; - OPEN_TDMCONFIG_AND_SET_GROUP - - trinity_desktop_lock_process = new LockProcess; - - // Start loading core functions, such as the desktop wallpaper interface - app->processEvents(); - - if (args->isSet( "internal" )) { - kdesktop_pid = atoi(args->getOption( "internal" )); - sigset_t new_mask; - sigset_t orig_mask; - struct sigaction act; - - in_internal_mode = TRUE; - - // handle SIGUSR1 - act.sa_handler= sigusr1_handler; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGUSR1); - act.sa_flags = 0; - sigaction(SIGUSR1, &act, 0L); - // handle SIGUSR2 - act.sa_handler= sigusr2_handler; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGUSR2); - act.sa_flags = 0; - sigaction(SIGUSR2, &act, 0L); - // handle SIGWINCH (an ersatz SIGUSR3) - act.sa_handler= sigusr3_handler; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGWINCH); - act.sa_flags = 0; - sigaction(SIGWINCH, &act, 0L); - // handle SIGTTIN (an ersatz SIGUSR4) - act.sa_handler= sigusr4_handler; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGTTIN); - act.sa_flags = 0; - sigaction(SIGTTIN, &act, 0L); - // handle SIGTTOU (an ersatz SIGUSR5) - act.sa_handler= sigusr5_handler; - sigemptyset(&(act.sa_mask)); - sigaddset(&(act.sa_mask), SIGTTOU); - act.sa_flags = 0; - sigaction(SIGTTOU, &act, 0L); - - // initialize the signal masks - sigemptyset(&new_mask); - sigaddset(&new_mask,SIGUSR1); - sigaddset(&new_mask,SIGUSR2); - sigaddset(&new_mask,SIGWINCH); - sigaddset(&new_mask,SIGTTIN); - sigaddset(&new_mask,SIGTTOU); - - while (signalled_run == FALSE) { - // let kdesktop know the saver process is ready - if (kill(kdesktop_pid, SIGTTIN) < 0) { - // The controlling kdesktop process probably died. Commit suicide... - return 12; - } - - // Get root window attributes - XWindowAttributes rootAttr; - XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr); - - // Disable reception of all X11 events on the root window - XSelectInput( tqt_xdisplay(), tqt_xrootwin(), 0 ); - app->processEvents(); + } - // wait for SIGUSR1, SIGUSR2, SIGWINCH, SIGTTIN, or SIGTTOU - sigprocmask(SIG_BLOCK, &new_mask, &orig_mask); - if (signalled_run != TRUE) { - sigsuspend(&orig_mask); + TDELockFile lock(locateLocal("tmp", "kdesktop_lock_lockfile")); + lock.setStaleTime(0); + TDELockFile::LockResult lockRet = lock.lock(); + if (lockRet != TDELockFile::LockOK) { + // Terminate existing (stale) process if needed + int pid; + TQString hostName; + TQString appName; + if (lock.getLockInfo(pid, hostName, appName)) { + // Verify that the pid in question is an instance of kdesktop_lock + int len; + char procpath[PATH_MAX]; + char fullpath[PATH_MAX]; + snprintf(procpath, sizeof(procpath), "/proc/%d/exe", pid); + len = readlink( procpath, fullpath, sizeof(fullpath) ); + if (len >= 0) { + fullpath[len] = 0; + TQFileInfo fileInfo(fullpath); + if (fileInfo.baseName() == "kdesktop_lock") { + // Verify that pid in question is owned by current user before killing it + uid_t current_uid = geteuid(); + + struct stat info; + if (lstat(procpath, &info) == 0) { + if (info.st_uid == current_uid) { + kill(pid, SIGKILL); + } + } + } + } + } } + + // Force a relock as a stale lockfile or process may have been dealt with above + if (!lock.isLocked()) { + lockRet = lock.lock(TDELockFile::LockNoBlock | TDELockFile::LockForce); + } + + kdDebug() << "app " << kdesktop_screen_number << " " << starting_screen << " " << child << " " << child_sockets.count() << " " << parent_connection << endl; + app->disableSessionManagement(); + TDEGlobal::locale()->insertCatalogue("libdmctl"); + + struct stat st; + KSimpleConfig* tdmconfig; + OPEN_TDMCONFIG_AND_SET_GROUP + + // Create new LockProcess, which also spawns threads inheriting the blocked signal mask + trinity_desktop_lock_process = new LockProcess; + + // Unblock reception of all signals in this thread sigprocmask(SIG_UNBLOCK, &new_mask, NULL); - // Reenable reception of X11 events on the root window - XSelectInput( tqt_xdisplay(), tqt_xrootwin(), rootAttr.your_event_mask ); - } - - // Block reception of all signals in this thread - sigprocmask(SIG_BLOCK, &new_mask, NULL); - } - - // (re)load settings here so that they actually reflect reality - // we need to read from the right rc file - possibly taking screen number in account - if (!trinity_desktop_lock_settings_initialized) { - KDesktopSettings::instance("kdesktoprc"); - trinity_desktop_lock_settings_initialized = true; - } - else { - KDesktopSettings::self()->readConfig(); - } - trinity_desktop_lock_use_system_modal_dialogs = !KDesktopSettings::useUnmanagedLockWindows(); - trinity_desktop_lock_delay_screensaver_start = KDesktopSettings::delaySaverStart(); - if (trinity_desktop_lock_use_system_modal_dialogs) { + // Start loading core functions, such as the desktop wallpaper interface + app->processEvents(); + + if (args->isSet( "internal" )) { + kdesktop_pid = atoi(args->getOption( "internal" )); + struct sigaction act; + + in_internal_mode = TRUE; + + // handle SIGUSR1 + act.sa_handler= sigusr1_handler; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGUSR1); + act.sa_flags = 0; + sigaction(SIGUSR1, &act, 0L); + // handle SIGUSR2 + act.sa_handler= sigusr2_handler; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGUSR2); + act.sa_flags = 0; + sigaction(SIGUSR2, &act, 0L); + // handle SIGWINCH (an ersatz SIGUSR3) + act.sa_handler= sigusr3_handler; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGWINCH); + act.sa_flags = 0; + sigaction(SIGWINCH, &act, 0L); + // handle SIGTTIN (an ersatz SIGUSR4) + act.sa_handler= sigusr4_handler; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGTTIN); + act.sa_flags = 0; + sigaction(SIGTTIN, &act, 0L); + // handle SIGTTOU (an ersatz SIGUSR5) + act.sa_handler= sigusr5_handler; + sigemptyset(&(act.sa_mask)); + sigaddset(&(act.sa_mask), SIGTTOU); + act.sa_flags = 0; + sigaction(SIGTTOU, &act, 0L); + + // initialize the signal masks + sigemptyset(&new_mask); + sigaddset(&new_mask,SIGUSR1); + sigaddset(&new_mask,SIGUSR2); + sigaddset(&new_mask,SIGWINCH); + sigaddset(&new_mask,SIGTTIN); + sigaddset(&new_mask,SIGTTOU); + + while (signalled_run == FALSE) { + // let kdesktop know the saver process is ready + if (kill(kdesktop_pid, SIGTTIN) < 0) { + // The controlling kdesktop process probably died. Commit suicide... + return 12; + } + + // Get root window attributes + XWindowAttributes rootAttr; + XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr); + + // Disable reception of all X11 events on the root window + XSelectInput( tqt_xdisplay(), tqt_xrootwin(), 0 ); + app->processEvents(); + + // wait for SIGUSR1, SIGUSR2, SIGWINCH, SIGTTIN, or SIGTTOU + sigprocmask(SIG_BLOCK, &new_mask, &orig_mask); + if (signalled_run != TRUE) { + sigsuspend(&orig_mask); + } + sigprocmask(SIG_UNBLOCK, &new_mask, NULL); + + // Reenable reception of X11 events on the root window + XSelectInput( tqt_xdisplay(), tqt_xrootwin(), rootAttr.your_event_mask ); + } + + // Block reception of all signals in this thread + sigprocmask(SIG_BLOCK, &new_mask, NULL); + } + + // (re)load settings here so that they actually reflect reality + // we need to read from the right rc file - possibly taking screen number in account + if (!trinity_desktop_lock_settings_initialized) { + KDesktopSettings::instance("kdesktoprc"); + trinity_desktop_lock_settings_initialized = true; + } + else { + KDesktopSettings::self()->readConfig(); + } + trinity_desktop_lock_use_system_modal_dialogs = !KDesktopSettings::useUnmanagedLockWindows(); + trinity_desktop_lock_delay_screensaver_start = KDesktopSettings::delaySaverStart(); + if (trinity_desktop_lock_use_system_modal_dialogs) { #ifdef BUILD_TSAK - trinity_desktop_lock_use_sak = tdmconfig->readBoolEntry("UseSAK", false) && KDesktopSettings::useTDESAK(); + trinity_desktop_lock_use_sak = tdmconfig->readBoolEntry("UseSAK", false) && KDesktopSettings::useTDESAK(); #else - trinity_desktop_lock_use_sak = false; + trinity_desktop_lock_use_sak = false; #endif - } - else { - trinity_desktop_lock_use_sak = false; // If SAK is enabled with unmanaged windows, the SAK dialog will never close and will "burn in" the screen - trinity_desktop_lock_delay_screensaver_start = false; // If trinity_desktop_lock_delay_screensaver_start is true with unmanaged windows, the lock dialog may never appear - } - trinity_desktop_lock_hide_active_windows = KDesktopSettings::hideActiveWindowsFromSaver(); - trinity_desktop_lock_hide_cancel_button = KDesktopSettings::hideCancelButton(); - - delete tdmconfig; - - if (args->isSet( "forcelock" ) || (signalled_forcelock == TRUE)) { - trinity_desktop_lock_forced = TRUE; - } - - trinity_desktop_lock_process->init(child, (args->isSet( "blank" ) || (signalled_blank == TRUE))); - if (!child) { - trinity_desktop_lock_process->setChildren(child_sockets); - } - else { - trinity_desktop_lock_process->setParent(parent_connection); - } - - bool rt; - if( (((!child) && (args->isSet( "forcelock" ))) || (signalled_forcelock == TRUE))) { - rt = trinity_desktop_lock_process->lock(); - } - else if( child || (args->isSet( "dontlock" ) || (signalled_dontlock == TRUE))) { - rt = trinity_desktop_lock_process->dontLock(); - } - else if( child || (args->isSet( "securedialog" ) || (signalled_securedialog == TRUE))) { - int retcode = tde_sak_verify_calling_process(); - if (retcode == 0) { - rt = trinity_desktop_lock_process->runSecureDialog(); - } - else { - return 1; - } - } - else { - rt = trinity_desktop_lock_process->defaultSave(); - } - if (!rt) { - return 0; - } - - if (in_internal_mode == FALSE) { - trinity_desktop_lock_hidden_window_list.clear(); - int ret = app->exec(); - restore_hidden_override_redirect_windows(); - return ret; - } - else { - if (kill(kdesktop_pid, 0) < 0) { - // The controlling kdesktop process probably died. Commit suicide... - return 12; - } - trinity_desktop_lock_hidden_window_list.clear(); - app->exec(); - restore_hidden_override_redirect_windows(); - if (kill(kdesktop_pid, SIGUSR1) < 0) { - // The controlling kdesktop process probably died. Commit suicide... - return 12; - } - - delete trinity_desktop_lock_process; - trinity_desktop_lock_process = NULL; - - // FIXME - // We should not have to return (restart) at all, - // but it seems that some X11 connections are left active, - // preventing the lock process from restarting properly in the while() loop above. - return 0; - } - } + } + else { + trinity_desktop_lock_use_sak = false; // If SAK is enabled with unmanaged windows, the SAK dialog will never close and will "burn in" the screen + trinity_desktop_lock_delay_screensaver_start = false; // If trinity_desktop_lock_delay_screensaver_start is true with unmanaged windows, the lock dialog may never appear + } + trinity_desktop_lock_hide_active_windows = KDesktopSettings::hideActiveWindowsFromSaver(); + trinity_desktop_lock_hide_cancel_button = KDesktopSettings::hideCancelButton(); + + delete tdmconfig; + + if (args->isSet( "forcelock" ) || (signalled_forcelock == TRUE)) { + trinity_desktop_lock_forced = TRUE; + } + + trinity_desktop_lock_process->init(child, (args->isSet( "blank" ) || (signalled_blank == TRUE))); + if (!child) { + trinity_desktop_lock_process->setChildren(child_sockets); + } + else { + trinity_desktop_lock_process->setParent(parent_connection); + } + + bool rt; + if( (((!child) && (args->isSet( "forcelock" ))) || (signalled_forcelock == TRUE))) { + rt = trinity_desktop_lock_process->lock(); + } + else if( child || (args->isSet( "dontlock" ) || (signalled_dontlock == TRUE))) { + rt = trinity_desktop_lock_process->dontLock(); + } + else if( child || (args->isSet( "securedialog" ) || (signalled_securedialog == TRUE))) { + int retcode = tde_sak_verify_calling_process(); + if (retcode == 0) { + rt = trinity_desktop_lock_process->runSecureDialog(); + } + else { + return 1; + } + } + else { + rt = trinity_desktop_lock_process->defaultSave(); + } + if (!rt) { + return 0; + } + + if (in_internal_mode == FALSE) { + trinity_desktop_lock_hidden_window_list.clear(); + int ret = app->exec(); + restore_hidden_override_redirect_windows(); + return ret; + } + else { + if (kill(kdesktop_pid, 0) < 0) { + // The controlling kdesktop process probably died. Commit suicide... + return 12; + } + trinity_desktop_lock_hidden_window_list.clear(); + app->exec(); + restore_hidden_override_redirect_windows(); + if (kill(kdesktop_pid, SIGUSR1) < 0) { + // The controlling kdesktop process probably died. Commit suicide... + return 12; + } + + delete trinity_desktop_lock_process; + trinity_desktop_lock_process = NULL; + + // FIXME + // We should not have to return (restart) at all, + // but it seems that some X11 connections are left active, + // preventing the lock process from restarting properly in the while() loop above. + return 0; + } + } } #include "main.moc" diff --git a/kdesktop/lock/main.h b/kdesktop/lock/main.h index da3accda2..fd19c6183 100644 --- a/kdesktop/lock/main.h +++ b/kdesktop/lock/main.h @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org> This library is free software; you can redistribute it and/or @@ -25,17 +25,20 @@ #include <time.h> class MyApp : public TDEApplication { - Q_OBJECT -public: - MyApp() : TDEApplication(), lastTick( 0 ) {} - MyApp(Display *display, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0, bool allowStyles=true) : TDEApplication(display, visual, colormap, allowStyles), lastTick( 0 ) {} -protected: - bool x11EventFilter( XEvent * ); -signals: - void activity(); - void mouseInteraction(XEvent *event); -private: - time_t lastTick; + Q_OBJECT + public: + MyApp() : TDEApplication(), lastTick( 0 ) {} + MyApp(Display *display, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0, bool allowStyles=true) : TDEApplication(display, visual, colormap, allowStyles), lastTick( 0 ) {} + + protected: + bool x11EventFilter( XEvent * ); + + signals: + void activity(); + void mouseInteraction(XEvent *event); + + private: + time_t lastTick; }; #endif diff --git a/kdesktop/lock/querydlg.cc b/kdesktop/lock/querydlg.cc index 7618a5062..004bbc458 100644 --- a/kdesktop/lock/querydlg.cc +++ b/kdesktop/lock/querydlg.cc @@ -1,8 +1,8 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // -// Copyright (c) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> #include <config.h> @@ -62,100 +62,102 @@ extern bool trinity_desktop_lock_use_system_modal_dialogs; // Simple dialog for displaying a password/PIN entry dialog // QueryDlg::QueryDlg(LockProcess *parent) - : TQDialog(parent, "query dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), - mUnlockingFailed(false) + : TQDialog(parent, "query dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), + mUnlockingFailed(false) { - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - setCaption(i18n("Information Needed")); - - frame = new TQFrame( this ); - if (trinity_desktop_lock_use_system_modal_dialogs) - frame->setFrameStyle( TQFrame::NoFrame ); - else - frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); - frame->setLineWidth( 2 ); - - mpixLabel = new TQLabel( frame, "pixlabel" ); - mpixLabel->setPixmap(DesktopIcon("unlock")); - - KUser user; - - mStatusLabel = new TQLabel( "<b> </b>", frame ); - //mStatusLabel->setAlignment( TQLabel::AlignCenter ); - mStatusLabel->setAlignment( TQLabel::AlignLeft ); - - KSeparator *sep = new KSeparator( KSeparator::HLine, frame ); - - ok = new KPushButton( i18n("Unl&ock"), frame ); - - TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); - unlockDialogLayout->addWidget( frame ); - - TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - layStatus->addWidget( mStatusLabel ); - - TQHBoxLayout *layPin = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - pin_box = new KPasswordEdit( this, "pin_box" ); - layPin->addWidget( pin_box ); - pin_box->setFocus(); - - TQHBoxLayout *layButtons = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - layButtons->addStretch(); - layButtons->addWidget( ok ); - - frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - frameLayout->addMultiCellWidget( mpixLabel, 0, 2, 0, 0, Qt::AlignTop ); - frameLayout->addLayout( layStatus, 0, 1 ); - frameLayout->addLayout( layPin, 2, 1 ); - frameLayout->addMultiCellWidget( sep, 3, 3, 0, 1 ); - frameLayout->addMultiCellLayout( layButtons, 4, 4, 0, 1 ); - - connect(ok, TQT_SIGNAL(clicked()), TQT_SLOT(slotOK())); - - installEventFilter(this); - setFixedSize( sizeHint() ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + setCaption(i18n("Information Needed")); + + frame = new TQFrame( this ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + frame->setFrameStyle( TQFrame::NoFrame ); + } + else { + frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); + } + frame->setLineWidth( 2 ); + + mpixLabel = new TQLabel( frame, "pixlabel" ); + mpixLabel->setPixmap(DesktopIcon("unlock")); + + KUser user; + + mStatusLabel = new TQLabel( "<b> </b>", frame ); + //mStatusLabel->setAlignment( TQLabel::AlignCenter ); + mStatusLabel->setAlignment( TQLabel::AlignLeft ); + + KSeparator *sep = new KSeparator( KSeparator::HLine, frame ); + + ok = new KPushButton( i18n("Unl&ock"), frame ); + + TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); + unlockDialogLayout->addWidget( frame ); + + TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + layStatus->addWidget( mStatusLabel ); + + TQHBoxLayout *layPin = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + pin_box = new KPasswordEdit( this, "pin_box" ); + layPin->addWidget( pin_box ); + pin_box->setFocus(); + + TQHBoxLayout *layButtons = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + layButtons->addStretch(); + layButtons->addWidget( ok ); + + frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + frameLayout->addMultiCellWidget( mpixLabel, 0, 2, 0, 0, Qt::AlignTop ); + frameLayout->addLayout( layStatus, 0, 1 ); + frameLayout->addLayout( layPin, 2, 1 ); + frameLayout->addMultiCellWidget( sep, 3, 3, 0, 1 ); + frameLayout->addMultiCellLayout( layButtons, 4, 4, 0, 1 ); + + connect(ok, TQT_SIGNAL(clicked()), TQT_SLOT(slotOK())); + + installEventFilter(this); + setFixedSize( sizeHint() ); } QueryDlg::~QueryDlg() { - hide(); + hide(); } void QueryDlg::slotOK() { - close(); + close(); } const char * QueryDlg::getEntry() { - return pin_box->password(); + return pin_box->password(); } void QueryDlg::updateLabel(TQString &txt) { - mStatusLabel->setPaletteForegroundColor(Qt::black); - mStatusLabel->setText("<b>" + txt + "</b>"); + mStatusLabel->setPaletteForegroundColor(Qt::black); + mStatusLabel->setText("<b>" + txt + "</b>"); } void QueryDlg::setUnlockIcon() { - mpixLabel->setPixmap(DesktopIcon("unlock")); + mpixLabel->setPixmap(DesktopIcon("unlock")); } void QueryDlg::setWarningIcon() { - mpixLabel->setPixmap(DesktopIcon("messagebox_warning")); + mpixLabel->setPixmap(DesktopIcon("messagebox_warning")); } void QueryDlg::show() { - TQDialog::show(); - TQApplication::flushX(); + TQDialog::show(); + TQApplication::flushX(); } #include "querydlg.moc" diff --git a/kdesktop/lock/querydlg.h b/kdesktop/lock/querydlg.h index 0da557caf..71f73f9ab 100644 --- a/kdesktop/lock/querydlg.h +++ b/kdesktop/lock/querydlg.h @@ -1,8 +1,8 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // -// Copyright (c) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> // #ifndef __QUERYDLG_H__ @@ -28,33 +28,33 @@ class TQListView; // class QueryDlg : public TQDialog { - Q_OBJECT - -public: - QueryDlg(LockProcess *parent); - ~QueryDlg(); - virtual void show(); - - void updateLabel( TQString &txt ); - void setUnlockIcon(); - void setWarningIcon(); - const char * getEntry(); - -private slots: - void slotOK(); - -private: - TQFrame *frame; - TQGridLayout *frameLayout; - TQLabel *mStatusLabel; - TQLabel *mpixLabel; - int mCapsLocked; - bool mUnlockingFailed; - TQStringList layoutsList; - TQStringList::iterator currLayout; - int sPid, sFd; - KPushButton *ok; - KPasswordEdit *pin_box; + Q_OBJECT + + public: + QueryDlg(LockProcess *parent); + ~QueryDlg(); + virtual void show(); + + void updateLabel( TQString &txt ); + void setUnlockIcon(); + void setWarningIcon(); + const char * getEntry(); + + private slots: + void slotOK(); + + private: + TQFrame *frame; + TQGridLayout *frameLayout; + TQLabel *mStatusLabel; + TQLabel *mpixLabel; + int mCapsLocked; + bool mUnlockingFailed; + TQStringList layoutsList; + TQStringList::iterator currLayout; + int sPid, sFd; + KPushButton *ok; + KPasswordEdit *pin_box; }; #endif diff --git a/kdesktop/lock/sakdlg.cc b/kdesktop/lock/sakdlg.cc index 1bb8305ef..803c77919 100644 --- a/kdesktop/lock/sakdlg.cc +++ b/kdesktop/lock/sakdlg.cc @@ -1,8 +1,8 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // -// Copyright (c) 2010-2011 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> #include <config.h> @@ -64,71 +64,75 @@ extern bool trinity_desktop_lock_use_sak; // Simple dialog for displaying an unlock status or recurring error message // SAKDlg::SAKDlg(LockProcess *parent) - : TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), - mUnlockingFailed(false) + : TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), + mUnlockingFailed(false) { - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - setCaption(i18n("Desktop Session Locked")); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + setCaption(i18n("Desktop Session Locked")); - frame = new TQFrame( this ); - if (trinity_desktop_lock_use_system_modal_dialogs) - frame->setFrameStyle( TQFrame::NoFrame ); - else - frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); - frame->setLineWidth( 2 ); + frame = new TQFrame( this ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + frame->setFrameStyle( TQFrame::NoFrame ); + } + else { + frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); + } + frame->setLineWidth( 2 ); - KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); + KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); - KUser user; + KUser user; - mStatusLabel = new TQLabel( "<b> </b>", frame ); - mStatusLabel->setAlignment( TQLabel::AlignVCenter ); + mStatusLabel = new TQLabel( "<b> </b>", frame ); + mStatusLabel->setAlignment( TQLabel::AlignVCenter ); - TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); - unlockDialogLayout->addWidget( frame ); + TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); + unlockDialogLayout->addWidget( frame ); - TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - layStatus->addWidget( mStatusLabel ); + TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + layStatus->addWidget( mStatusLabel ); - frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft ); - frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter); + frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft ); + frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter); - mStatusLabel->setText("<b>" + i18n("Press Ctrl+Alt+Del to begin.") + "</b><p>" + i18n("This process helps keep your password secure.") + "<br>" + i18n("It prevents unauthorized users from emulating the login screen.")); + mStatusLabel->setText("<b>" + i18n("Press Ctrl+Alt+Del to begin.") + "</b><p>" + i18n("This process helps keep your password secure.") + "<br>" + i18n("It prevents unauthorized users from emulating the login screen.")); - installEventFilter(this); - setFixedSize( sizeHint() ); + installEventFilter(this); + setFixedSize( sizeHint() ); - mSAKProcess = new TDEProcess; - *mSAKProcess << "tdmtsak"; - connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited())); - mSAKProcess->start(); + mSAKProcess = new TDEProcess; + *mSAKProcess << "tdmtsak"; + connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited())); + mSAKProcess->start(); } void SAKDlg::slotSAKProcessExited() { - int retcode = mSAKProcess->exitStatus(); - if (retcode != 0) trinity_desktop_lock_use_sak = false; - hide(); + int retcode = mSAKProcess->exitStatus(); + if (retcode != 0) { + trinity_desktop_lock_use_sak = false; + } + hide(); } SAKDlg::~SAKDlg() { - if ((mSAKProcess) && (mSAKProcess->isRunning())) { - mSAKProcess->kill(SIGTERM); - delete mSAKProcess; - } - hide(); + if ((mSAKProcess) && (mSAKProcess->isRunning())) { + mSAKProcess->kill(SIGKILL); + delete mSAKProcess; + } + hide(); } void SAKDlg::closeDialogForced() { - TQDialog::reject(); + TQDialog::reject(); } void SAKDlg::reject() @@ -138,14 +142,14 @@ void SAKDlg::reject() void SAKDlg::updateLabel(TQString &txt) { - mStatusLabel->setPaletteForegroundColor(Qt::black); - mStatusLabel->setText("<b>" + txt + "</b>"); + mStatusLabel->setPaletteForegroundColor(Qt::black); + mStatusLabel->setText("<b>" + txt + "</b>"); } void SAKDlg::show() { - TQDialog::show(); - TQApplication::flushX(); + TQDialog::show(); + TQApplication::flushX(); } #include "sakdlg.moc" diff --git a/kdesktop/lock/sakdlg.h b/kdesktop/lock/sakdlg.h index 5810b8771..faded4b6e 100644 --- a/kdesktop/lock/sakdlg.h +++ b/kdesktop/lock/sakdlg.h @@ -1,8 +1,8 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // -// Copyright (c) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> // #ifndef __SAKDLG_H__ @@ -26,32 +26,32 @@ class TQListView; // class SAKDlg : public TQDialog { - Q_OBJECT - -public: - SAKDlg(LockProcess *parent); - ~SAKDlg(); - virtual void show(); - - void updateLabel( TQString &txt ); - void closeDialogForced(); - -private slots: - void slotSAKProcessExited(); - -protected slots: - virtual void reject(); - -private: - TQFrame *frame; - TQGridLayout *frameLayout; - TQLabel *mStatusLabel; - int mCapsLocked; - bool mUnlockingFailed; - TQStringList layoutsList; - TQStringList::iterator currLayout; - int sPid, sFd; - TDEProcess* mSAKProcess; + Q_OBJECT + + public: + SAKDlg(LockProcess *parent); + ~SAKDlg(); + virtual void show(); + + void updateLabel( TQString &txt ); + void closeDialogForced(); + + private slots: + void slotSAKProcessExited(); + + protected slots: + virtual void reject(); + + private: + TQFrame *frame; + TQGridLayout *frameLayout; + TQLabel *mStatusLabel; + int mCapsLocked; + bool mUnlockingFailed; + TQStringList layoutsList; + TQStringList::iterator currLayout; + int sPid, sFd; + TDEProcess* mSAKProcess; }; #endif diff --git a/kdesktop/lock/securedlg.cc b/kdesktop/lock/securedlg.cc index b38378f2e..fca79a707 100644 --- a/kdesktop/lock/securedlg.cc +++ b/kdesktop/lock/securedlg.cc @@ -1,8 +1,8 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // -// Copyright (c) 2010-2011 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> #include <config.h> @@ -64,152 +64,154 @@ extern bool trinity_desktop_lock_use_sak; // Simple dialog for displaying an unlock status or recurring error message // SecureDlg::SecureDlg(LockProcess *parent) - : TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), - mUnlockingFailed(false), retInt(NULL) + : TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), + mUnlockingFailed(false), retInt(NULL) { - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - setCaption(i18n("Secure Desktop Area")); - - frame = new TQFrame( this ); - if (trinity_desktop_lock_use_system_modal_dialogs) - frame->setFrameStyle( TQFrame::NoFrame ); - else - frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); - frame->setLineWidth( 2 ); - - KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); - - KUser user; - - mLogonStatus = new TQLabel( frame ); - TQString userString = user.fullName(); - if (userString == "") { - userString = user.loginName(); - } - if (userString != "") { - mLogonStatus->setText(i18n("'%1' is currently logged on").arg( user.fullName() )); - } - else { - mLogonStatus->setText(i18n("You are currently logged on")); // We should never get here, and this message is somewhat obtuse, but it is better than displaying two qotation marks with no text between them... - } - - KSeparator *sep = new KSeparator( KSeparator::HLine, frame ); - - mLockButton = new TQPushButton( frame ); - mLockButton->setText(i18n("Lock Session")); - - mTaskButton = new TQPushButton( frame ); - mTaskButton->setText(i18n("Task Manager")); - - mShutdownButton = new TQPushButton( frame ); - mShutdownButton->setText(i18n("Logoff Menu")); - - mCancelButton = new TQPushButton( frame ); - mCancelButton->setText(i18n("Cancel")); - - mSwitchButton = new TQPushButton( frame ); - mSwitchButton->setText(i18n("Switch User")); - mSwitchButton->setEnabled(false); // FIXME - - TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); - unlockDialogLayout->addWidget( frame ); - - TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - layStatus->addWidget( mLogonStatus ); - - TQGridLayout *layPBGrid = new TQGridLayout( 0, 0, KDialog::spacingHint()); - layPBGrid->addWidget( mLockButton, 0, 0 ); - layPBGrid->addWidget( mTaskButton, 0, 1 ); - layPBGrid->addWidget( mShutdownButton, 0, 2 ); - layPBGrid->addWidget( mCancelButton, 0, 3 ); - layPBGrid->addWidget( mSwitchButton, 1, 0 ); - - frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft ); - frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter); - frameLayout->addMultiCellWidget( sep, 2, 2, 0, 1 ); - frameLayout->addMultiCellLayout( layPBGrid, 3, 3, 0, 1, AlignLeft | AlignVCenter); - - connect(mCancelButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnCancel())); - connect(mLockButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnLock())); - connect(mTaskButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnTask())); - connect(mShutdownButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnShutdown())); - connect(mSwitchButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnSwitchUser())); - - TQSize dlgSz = sizeHint(); - int btnSize = dlgSz.width(); - btnSize = btnSize / 4; - btnSize = btnSize - (KDialog::spacingHint() / 2); - mLockButton->setFixedWidth(btnSize); - mTaskButton->setFixedWidth(btnSize); - mCancelButton->setFixedWidth(btnSize); - mShutdownButton->setFixedWidth(btnSize); - mSwitchButton->setFixedWidth(btnSize); - - installEventFilter(this); - setFixedSize( sizeHint() ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + setCaption(i18n("Secure Desktop Area")); + + frame = new TQFrame( this ); + if (trinity_desktop_lock_use_system_modal_dialogs) { + frame->setFrameStyle( TQFrame::NoFrame ); + } + else { + frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); + } + frame->setLineWidth( 2 ); + + KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); + + KUser user; + + mLogonStatus = new TQLabel( frame ); + TQString userString = user.fullName(); + if (userString == "") { + userString = user.loginName(); + } + if (userString != "") { + mLogonStatus->setText(i18n("'%1' is currently logged on").arg( user.fullName() )); + } + else { + mLogonStatus->setText(i18n("You are currently logged on")); // We should never get here, and this message is somewhat obtuse, but it is better than displaying two qotation marks with no text between them... + } + + KSeparator *sep = new KSeparator( KSeparator::HLine, frame ); + + mLockButton = new TQPushButton( frame ); + mLockButton->setText(i18n("Lock Session")); + + mTaskButton = new TQPushButton( frame ); + mTaskButton->setText(i18n("Task Manager")); + + mShutdownButton = new TQPushButton( frame ); + mShutdownButton->setText(i18n("Logoff Menu")); + + mCancelButton = new TQPushButton( frame ); + mCancelButton->setText(i18n("Cancel")); + + mSwitchButton = new TQPushButton( frame ); + mSwitchButton->setText(i18n("Switch User")); + mSwitchButton->setEnabled(false); // FIXME + + TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); + unlockDialogLayout->addWidget( frame ); + + TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + layStatus->addWidget( mLogonStatus ); + + TQGridLayout *layPBGrid = new TQGridLayout( 0, 0, KDialog::spacingHint()); + layPBGrid->addWidget( mLockButton, 0, 0 ); + layPBGrid->addWidget( mTaskButton, 0, 1 ); + layPBGrid->addWidget( mShutdownButton, 0, 2 ); + layPBGrid->addWidget( mCancelButton, 0, 3 ); + layPBGrid->addWidget( mSwitchButton, 1, 0 ); + + frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft ); + frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter); + frameLayout->addMultiCellWidget( sep, 2, 2, 0, 1 ); + frameLayout->addMultiCellLayout( layPBGrid, 3, 3, 0, 1, AlignLeft | AlignVCenter); + + connect(mCancelButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnCancel())); + connect(mLockButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnLock())); + connect(mTaskButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnTask())); + connect(mShutdownButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnShutdown())); + connect(mSwitchButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnSwitchUser())); + + TQSize dlgSz = sizeHint(); + int btnSize = dlgSz.width(); + btnSize = btnSize / 4; + btnSize = btnSize - (KDialog::spacingHint() / 2); + mLockButton->setFixedWidth(btnSize); + mTaskButton->setFixedWidth(btnSize); + mCancelButton->setFixedWidth(btnSize); + mShutdownButton->setFixedWidth(btnSize); + mSwitchButton->setFixedWidth(btnSize); + + installEventFilter(this); + setFixedSize( sizeHint() ); } SecureDlg::~SecureDlg() { - hide(); + hide(); } void SecureDlg::slotBtnCancel() { - if (retInt) *retInt = 0; - hide(); + if (retInt) *retInt = 0; + hide(); } void SecureDlg::slotBtnLock() { - if (retInt) *retInt = 1; - hide(); + if (retInt) *retInt = 1; + hide(); } void SecureDlg::slotBtnTask() { - if (retInt) *retInt = 2; - hide(); + if (retInt) *retInt = 2; + hide(); } void SecureDlg::slotBtnShutdown() { - if (retInt) *retInt = 3; - hide(); + if (retInt) *retInt = 3; + hide(); } void SecureDlg::slotBtnSwitchUser() { - if (retInt) *retInt = 4; - hide(); + if (retInt) *retInt = 4; + hide(); } void SecureDlg::setRetInt(int *i) { - retInt = i; + retInt = i; } void SecureDlg::closeDialogForced() { - if (retInt) *retInt = 0; - TQDialog::reject(); + if (retInt) *retInt = 0; + TQDialog::reject(); } void SecureDlg::reject() { - closeDialogForced(); + closeDialogForced(); } void SecureDlg::show() { - TQDialog::show(); - TQApplication::flushX(); + TQDialog::show(); + TQApplication::flushX(); } #include "securedlg.moc" diff --git a/kdesktop/lock/securedlg.h b/kdesktop/lock/securedlg.h index d616bf2e7..9ad0ac1da 100644 --- a/kdesktop/lock/securedlg.h +++ b/kdesktop/lock/securedlg.h @@ -1,8 +1,8 @@ //=========================================================================== // -// This file is part of the KDE project +// This file is part of the TDE project // -// Copyright (c) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// Copyright (c) 2010 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> // #ifndef __SECUREDLG_H__ @@ -27,41 +27,41 @@ class TQListView; // class SecureDlg : public TQDialog { - Q_OBJECT + Q_OBJECT -public: - SecureDlg(LockProcess *parent); - ~SecureDlg(); - virtual void show(); + public: + SecureDlg(LockProcess *parent); + ~SecureDlg(); + virtual void show(); - void closeDialogForced(); - void setRetInt(int *); + void closeDialogForced(); + void setRetInt(int *); -private slots: - void slotBtnCancel(); - void slotBtnLock(); - void slotBtnTask(); - void slotBtnShutdown(); - void slotBtnSwitchUser(); + private slots: + void slotBtnCancel(); + void slotBtnLock(); + void slotBtnTask(); + void slotBtnShutdown(); + void slotBtnSwitchUser(); -protected slots: - virtual void reject(); + protected slots: + virtual void reject(); -private: - TQFrame *frame; - TQGridLayout *frameLayout; - TQLabel *mLogonStatus; - TQButton *mCancelButton; - TQButton *mLockButton; - TQButton *mTaskButton; - TQButton *mShutdownButton; - TQButton *mSwitchButton; - int mCapsLocked; - bool mUnlockingFailed; - TQStringList layoutsList; - TQStringList::iterator currLayout; - int sPid, sFd; - int* retInt; + private: + TQFrame *frame; + TQGridLayout *frameLayout; + TQLabel *mLogonStatus; + TQButton *mCancelButton; + TQButton *mLockButton; + TQButton *mTaskButton; + TQButton *mShutdownButton; + TQButton *mSwitchButton; + int mCapsLocked; + bool mUnlockingFailed; + TQStringList layoutsList; + TQStringList::iterator currLayout; + int sPid, sFd; + int* retInt; }; #endif diff --git a/kdesktop/lockeng.cc b/kdesktop/lockeng.cc index 600573f27..8aa6bb61c 100644 --- a/kdesktop/lockeng.cc +++ b/kdesktop/lockeng.cc @@ -11,10 +11,16 @@ #include <stdlib.h> +#include <ksslcertificate.h> + +#include <tdehardwaredevices.h> +#include <tdecryptographiccarddevice.h> + #include <kstandarddirs.h> #include <tdeapplication.h> #include <kservicegroup.h> #include <kdebug.h> +#include <kuser.h> #include <tdelocale.h> #include <tqfile.h> #include <tqtimer.h> @@ -82,6 +88,7 @@ SaverEngine::SaverEngine() mTerminationRequested(false), mSaverProcessReady(false), mNewVTAfterLockEngage(false), + mValidCryptoCardInserted(false), mSwitchVTAfterLockEngage(-1), dBusLocal(0), dBusWatch(0), @@ -158,6 +165,30 @@ SaverEngine::SaverEngine() sigaddset(&mThreadBlockSet, SIGTTIN); pthread_sigmask(SIG_BLOCK, &mThreadBlockSet, NULL); + // Initialize SmartCard readers + TDEGenericDevice *hwdevice; + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard); + for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + connect(cdevice, TQT_SIGNAL(certificateListAvailable(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardInserted(TDECryptographicCardDevice*))); + connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardRemoved(TDECryptographicCardDevice*))); + cdevice->enableCardMonitoring(true); + } + + // Check card login status + KUser userinfo; + TQString fileName = userinfo.homeDir() + "/.tde_card_login_state"; + TQFile flagFile(fileName); + if (flagFile.open(IO_ReadOnly)) { + TQTextStream stream(&flagFile); + if (stream.readLine().startsWith("1")) { + // Card was likely used to log in + TQTimer::singleShot(5000, this, SLOT(cardStartupTimeout())); + } + flagFile.close(); + } + dBusConnect(); } @@ -186,6 +217,52 @@ SaverEngine::~SaverEngine() delete m_helperThread; } +void SaverEngine::cardStartupTimeout() { + if (!mValidCryptoCardInserted) { + // Restore saver timeout + configure(); + + // Force lock + lockScreen(); + } +} + +void SaverEngine::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) { + TQString login_name = TQString::null; + X509CertificatePtrList certList = cdevice->cardX509Certificates(); + if (certList.count() > 0) { + KSSLCertificate* card_cert = NULL; + card_cert = KSSLCertificate::fromX509(certList[0]); + TQStringList cert_subject_parts = TQStringList::split("/", card_cert->getSubject(), false); + for (TQStringList::Iterator it = cert_subject_parts.begin(); it != cert_subject_parts.end(); ++it ) { + TQString lcpart = (*it).lower(); + if (lcpart.startsWith("cn=")) { + login_name = lcpart.right(lcpart.length() - strlen("cn=")); + } + } + delete card_cert; + } + + if (login_name != "") { + KUser user; + if (login_name == user.loginName()) { + mValidCryptoCardInserted = true; + } + } +} + +void SaverEngine::cryptographicCardRemoved(TDECryptographicCardDevice* cdevice) { + if (mValidCryptoCardInserted) { + mValidCryptoCardInserted = false; + + // Restore saver timeout + configure(); + + // Force lock + lockScreen(); + } +} + //--------------------------------------------------------------------------- // // This should be called only using DCOP. @@ -201,8 +278,12 @@ void SaverEngine::lock() // void SaverEngine::lockScreen(bool DCOP) { + if (mValidCryptoCardInserted) { + return; + } + bool ok = true; - if (mState != Saving) + if (mState == Waiting) { ok = startLockProcess( ForceLock ); // It takes a while for kdesktop_lock to start and lock the screen. @@ -250,9 +331,10 @@ void SaverEngine::saverLockReady() //--------------------------------------------------------------------------- void SaverEngine::save() { - if (mState == Waiting) - { - startLockProcess( DefaultLock ); + if (!mValidCryptoCardInserted) { + if (mState == Waiting) { + startLockProcess( DefaultLock ); + } } } @@ -283,28 +365,25 @@ bool SaverEngine::enable( bool e ) mEnabled = e; - if (mEnabled) - { + if (mEnabled) { if ( !mXAutoLock ) { mXAutoLock = new XAutoLock(); connect(mXAutoLock, TQT_SIGNAL(timeout()), TQT_SLOT(idleTimeout())); } - mXAutoLock->setTimeout(mTimeout); - mXAutoLock->setDPMS(true); + mXAutoLock->setTimeout(mTimeout); + mXAutoLock->setDPMS(true); //mXAutoLock->changeCornerLockStatus( mLockCornerTopLeft, mLockCornerTopRight, mLockCornerBottomLeft, mLockCornerBottomRight); - // We'll handle blanking - XSetScreenSaver(tqt_xdisplay(), mTimeout + 10, mXInterval, PreferBlanking, mXExposures); - kdDebug() << "XSetScreenSaver " << mTimeout + 10 << endl; - - mXAutoLock->start(); - - kdDebug(1204) << "Saver Engine started, timeout: " << mTimeout << endl; + // We'll handle blanking + XSetScreenSaver(tqt_xdisplay(), mTimeout + 10, mXInterval, PreferBlanking, mXExposures); + kdDebug() << "XSetScreenSaver " << mTimeout + 10 << endl; + + mXAutoLock->start(); + + kdDebug(1204) << "Saver Engine started, timeout: " << mTimeout << endl; } - else - { - if (mXAutoLock) - { + else { + if (mXAutoLock) { delete mXAutoLock; mXAutoLock = 0; } @@ -652,10 +731,12 @@ void SaverEngine::lockProcessWaiting() // void SaverEngine::idleTimeout() { - // disable X screensaver - XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset ); - XSetScreenSaver(tqt_xdisplay(), 0, mXInterval, PreferBlanking, DontAllowExposures); - startLockProcess( DefaultLock ); + if (!mValidCryptoCardInserted) { + // disable X screensaver + XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset ); + XSetScreenSaver(tqt_xdisplay(), 0, mXInterval, PreferBlanking, DontAllowExposures); + startLockProcess( DefaultLock ); + } } xautolock_corner_t SaverEngine::applyManualSettings(int action) diff --git a/kdesktop/lockeng.h b/kdesktop/lockeng.h index 166d6b40e..11f751db8 100644 --- a/kdesktop/lockeng.h +++ b/kdesktop/lockeng.h @@ -18,6 +18,7 @@ #include <tqdbusconnection.h> +class TDECryptographicCardDevice; class DCOPClientTransaction; class TQT_DBusMessage; class TQT_DBusProxy; @@ -134,11 +135,15 @@ private slots: void handleSecureDialog(); void slotSAKProcessExited(); + void cryptographicCardInserted(TDECryptographicCardDevice*); + void cryptographicCardRemoved(TDECryptographicCardDevice*); + /** * Enable wallpaper exports */ void enableExports(); void recoverFromHackingAttempt(); + void cardStartupTimeout(); bool dBusReconnect(); @@ -186,6 +191,7 @@ private: bool mTerminationRequested; bool mSaverProcessReady; bool mNewVTAfterLockEngage; + bool mValidCryptoCardInserted; int mSwitchVTAfterLockEngage; struct sigaction mSignalAction; TQT_DBusConnection dBusConn; diff --git a/kdesktop/patterns/fish.png b/kdesktop/patterns/fish.png Binary files differindex 33de9be7c..4d7f6005c 100644 --- a/kdesktop/patterns/fish.png +++ b/kdesktop/patterns/fish.png diff --git a/kdesktop/patterns/flowers.png b/kdesktop/patterns/flowers.png Binary files differindex cab6af8eb..9ab816d09 100644 --- a/kdesktop/patterns/flowers.png +++ b/kdesktop/patterns/flowers.png diff --git a/kdesktop/patterns/pavement.png b/kdesktop/patterns/pavement.png Binary files differindex 7ba9bcf14..c06a42da5 100644 --- a/kdesktop/patterns/pavement.png +++ b/kdesktop/patterns/pavement.png diff --git a/kdesktop/patterns/rattan.png b/kdesktop/patterns/rattan.png Binary files differindex 28f600541..beccc178e 100644 --- a/kdesktop/patterns/rattan.png +++ b/kdesktop/patterns/rattan.png diff --git a/kdesktop/patterns/stonewall2.png b/kdesktop/patterns/stonewall2.png Binary files differindex cb9f10f40..a750d680f 100644 --- a/kdesktop/patterns/stonewall2.png +++ b/kdesktop/patterns/stonewall2.png diff --git a/kdesktop/patterns/triangles.png b/kdesktop/patterns/triangles.png Binary files differindex cde9068eb..6d9d637e4 100644 --- a/kdesktop/patterns/triangles.png +++ b/kdesktop/patterns/triangles.png diff --git a/kdesktop/pics/cr32-app-error.png b/kdesktop/pics/cr32-app-error.png Binary files differindex 1de7a6fda..18efe897b 100644 --- a/kdesktop/pics/cr32-app-error.png +++ b/kdesktop/pics/cr32-app-error.png diff --git a/kdesktop/pics/ksslogo.png b/kdesktop/pics/ksslogo.png Binary files differindex 953ecdddb..466215dee 100644 --- a/kdesktop/pics/ksslogo.png +++ b/kdesktop/pics/ksslogo.png diff --git a/kdesktop/pics/splash.png b/kdesktop/pics/splash.png Binary files differindex c32afcc1e..1d5738697 100644 --- a/kdesktop/pics/splash.png +++ b/kdesktop/pics/splash.png diff --git a/kfind/hi16-app-kfind.png b/kfind/hi16-app-kfind.png Binary files differindex f2b60daa7..b3abedcff 100644 --- a/kfind/hi16-app-kfind.png +++ b/kfind/hi16-app-kfind.png diff --git a/kfind/hi22-app-kfind.png b/kfind/hi22-app-kfind.png Binary files differindex 647dc2196..dbc3b2b84 100644 --- a/kfind/hi22-app-kfind.png +++ b/kfind/hi22-app-kfind.png diff --git a/kfind/hi32-app-kfind.png b/kfind/hi32-app-kfind.png Binary files differindex 171c2b1d2..1a1cd173e 100644 --- a/kfind/hi32-app-kfind.png +++ b/kfind/hi32-app-kfind.png diff --git a/kfind/hi48-app-kfind.png b/kfind/hi48-app-kfind.png Binary files differindex 1d472379a..41dc77f90 100644 --- a/kfind/hi48-app-kfind.png +++ b/kfind/hi48-app-kfind.png diff --git a/kfind/hi64-app-kfind.png b/kfind/hi64-app-kfind.png Binary files differindex fa5b5f0c4..500e4f65e 100644 --- a/kfind/hi64-app-kfind.png +++ b/kfind/hi64-app-kfind.png diff --git a/kfind/pics/lo22-action-archive.png b/kfind/pics/lo22-action-archive.png Binary files differindex 54e73c2f9..c883f7657 100644 --- a/kfind/pics/lo22-action-archive.png +++ b/kfind/pics/lo22-action-archive.png diff --git a/kfind/pics/lo22-action-delete.png b/kfind/pics/lo22-action-delete.png Binary files differindex 1018d6e22..61c1cd8ce 100644 --- a/kfind/pics/lo22-action-delete.png +++ b/kfind/pics/lo22-action-delete.png diff --git a/kfind/pics/lo22-action-idea.png b/kfind/pics/lo22-action-idea.png Binary files differindex e348d48b6..b18de98f9 100644 --- a/kfind/pics/lo22-action-idea.png +++ b/kfind/pics/lo22-action-idea.png diff --git a/kfind/pics/lo22-action-info.png b/kfind/pics/lo22-action-info.png Binary files differindex 41aec81ef..2e4b20030 100644 --- a/kfind/pics/lo22-action-info.png +++ b/kfind/pics/lo22-action-info.png diff --git a/kfind/pics/lo22-action-openfile.png b/kfind/pics/lo22-action-openfile.png Binary files differindex bdf6c55d9..25aebc134 100644 --- a/kfind/pics/lo22-action-openfile.png +++ b/kfind/pics/lo22-action-openfile.png diff --git a/kfind/pics/lo22-action-save.png b/kfind/pics/lo22-action-save.png Binary files differindex 4ae7ad4cd..f9688cb06 100644 --- a/kfind/pics/lo22-action-save.png +++ b/kfind/pics/lo22-action-save.png diff --git a/kfind/pics/lo22-action-search.png b/kfind/pics/lo22-action-search.png Binary files differindex 2ed5031c4..824de2a62 100644 --- a/kfind/pics/lo22-action-search.png +++ b/kfind/pics/lo22-action-search.png diff --git a/khelpcenter/htmlsearch/star.png b/khelpcenter/htmlsearch/star.png Binary files differindex 5e7615871..9c912b3d5 100644 --- a/khelpcenter/htmlsearch/star.png +++ b/khelpcenter/htmlsearch/star.png diff --git a/khelpcenter/htmlsearch/star_blank.png b/khelpcenter/htmlsearch/star_blank.png Binary files differindex 2689281af..58294d00b 100644 --- a/khelpcenter/htmlsearch/star_blank.png +++ b/khelpcenter/htmlsearch/star_blank.png diff --git a/khelpcenter/pics/hi128-app-khelpcenter.png b/khelpcenter/pics/hi128-app-khelpcenter.png Binary files differindex 949fd3dce..17efd9225 100644 --- a/khelpcenter/pics/hi128-app-khelpcenter.png +++ b/khelpcenter/pics/hi128-app-khelpcenter.png diff --git a/khelpcenter/pics/hi16-app-khelpcenter.png b/khelpcenter/pics/hi16-app-khelpcenter.png Binary files differindex d242b4b3e..29b089f64 100644 --- a/khelpcenter/pics/hi16-app-khelpcenter.png +++ b/khelpcenter/pics/hi16-app-khelpcenter.png diff --git a/khelpcenter/pics/hi22-app-khelpcenter.png b/khelpcenter/pics/hi22-app-khelpcenter.png Binary files differindex 71f59060a..c8fbfc544 100644 --- a/khelpcenter/pics/hi22-app-khelpcenter.png +++ b/khelpcenter/pics/hi22-app-khelpcenter.png diff --git a/khelpcenter/pics/hi32-app-khelpcenter.png b/khelpcenter/pics/hi32-app-khelpcenter.png Binary files differindex 79dd450e8..637d7732a 100644 --- a/khelpcenter/pics/hi32-app-khelpcenter.png +++ b/khelpcenter/pics/hi32-app-khelpcenter.png diff --git a/khelpcenter/pics/hi48-app-khelpcenter.png b/khelpcenter/pics/hi48-app-khelpcenter.png Binary files differindex 24582cf57..153e9f7ea 100644 --- a/khelpcenter/pics/hi48-app-khelpcenter.png +++ b/khelpcenter/pics/hi48-app-khelpcenter.png diff --git a/khelpcenter/pics/hi64-app-khelpcenter.png b/khelpcenter/pics/hi64-app-khelpcenter.png Binary files differindex 6ea007cf8..0c2550402 100644 --- a/khelpcenter/pics/hi64-app-khelpcenter.png +++ b/khelpcenter/pics/hi64-app-khelpcenter.png diff --git a/khotkeys/CMakeLists.txt b/khotkeys/CMakeLists.txt index 39c84111e..4eda615a3 100644 --- a/khotkeys/CMakeLists.txt +++ b/khotkeys/CMakeLists.txt @@ -37,5 +37,3 @@ add_subdirectory( app ) add_subdirectory( data ) add_subdirectory( update ) tde_conditional_add_subdirectory( WITH_ARTS arts ) - -install( FILES khotkeys.desktop DESTINATION ${AUTOSTART_INSTALL_DIR} ) diff --git a/khotkeys/Makefile.am b/khotkeys/Makefile.am index 981a8a9b6..924686af4 100644 --- a/khotkeys/Makefile.am +++ b/khotkeys/Makefile.am @@ -1,10 +1,5 @@ SUBDIRS = shared kcontrol app data update $(KHOTKEYS_ARTS_SUBDIR) -khotkeys_autostart_DATA = khotkeys.desktop -khotkeys_autostartdir = $(datadir)/autostart - -EXTRA_DIST = $(khotkeys_autostart_DATA) COPYING AUTHORS - messages: rc.cpp $(EXTRACTRC) kcontrol/ui/*.ui data/*.khotkeys >> rc.cpp $(XGETTEXT) rc.cpp app/*.cpp shared/*.cpp shared/*.h kcontrol/*.cpp -o $(podir)/khotkeys.pot diff --git a/khotkeys/app/CMakeLists.txt b/khotkeys/app/CMakeLists.txt index 789d4ea7f..df2bd70db 100644 --- a/khotkeys/app/CMakeLists.txt +++ b/khotkeys/app/CMakeLists.txt @@ -22,11 +22,6 @@ link_directories( ) -##### other data ################################ - -install( FILES khotkeys.desktop DESTINATION ${SERVICES_INSTALL_DIR}/kded ) - - ##### kded_khotkeys (module) #################### tde_add_kpart( kded_khotkeys AUTOMOC diff --git a/khotkeys/app/Makefile.am b/khotkeys/app/Makefile.am index e003ad0c2..0ff95b46e 100644 --- a/khotkeys/app/Makefile.am +++ b/khotkeys/app/Makefile.am @@ -16,6 +16,3 @@ noinst_HEADERS = app.h kded.h INCLUDES = -I$(srcdir)/../shared $(all_includes) METASOURCES = AUTO - -servicesdir = $(kde_servicesdir)/kded -services_DATA = khotkeys.desktop diff --git a/khotkeys/app/khotkeys.desktop b/khotkeys/app/khotkeys.desktop deleted file mode 100644 index 036e3b462..000000000 --- a/khotkeys/app/khotkeys.desktop +++ /dev/null @@ -1,206 +0,0 @@ -[Desktop Entry] -Exec=khotkeys -Type=Service -X-TDE-ServiceTypes=KDEDModule -X-TDE-ModuleType=Library -X-TDE-Library=khotkeys -X-TDE-FactoryName=khotkeys -X-TDE-Kded-autoload=false -X-DocPath=kcontrol/khotkeys/index.html - -Name=Input Actions -Name[af]=Inset Aksies -Name[ar]=نشاطات الإدخال -Name[be]=Дзеянні -Name[bg]=Действия -Name[br]=Oberoù enkas -Name[bs]=Akcije unosa -Name[ca]=Accions d'entrada -Name[cs]=Vstupní činnosti -Name[csb]=Klawiszowé dzéjania -Name[da]=Indgiv handlinger -Name[de]=Tastenkombinationen -Name[el]=Ενέργειες εισόδου -Name[eo]=Enir-agadoj -Name[es]=Introducir acciones -Name[et]=Sisestustoimingud -Name[eu]=Sarrerako ekintzak -Name[fa]=کنشهای ورودی -Name[fi]=Syöttötoiminnot -Name[fr]=Actions d'entrées -Name[fy]=Ynfieraksjes -Name[ga]=Gníomhartha Ionchurtha -Name[gl]=Accións de Entrada -Name[he]=פעולות קלט -Name[hr]=Aktivnosti unosa -Name[hu]=Beviteli műveletek -Name[is]=Inntaksaðgerðir -Name[it]=Azioni di immissione -Name[ja]=入力アクション -Name[ka]=შეტანის ქმედებები -Name[kk]=Енгізу әрекеттері -Name[km]=អំពើបញ្ចូល -Name[ko]=입력 동작 -Name[lt]=Įvesties veiksmai -Name[mk]=Влезни дејства -Name[ms]=Tindakan Input -Name[nb]=Input-handlinger -Name[nds]=Ingaavakschonen -Name[ne]=आगत कार्य -Name[nl]=Invoeracties -Name[nn]=Innhandlingar -Name[pa]=ਇੰਪੁੱਟ ਕਾਰਵਾਈਆਂ -Name[pl]=Akcje klawiszowe -Name[pt]=Acções de Entrada -Name[pt_BR]=Ações de Entrada -Name[ro]=Acțiuni de intrare -Name[ru]=Действия -Name[rw]=Kwinjiza Ibikorwa -Name[sk]=Vstupné akcie -Name[sl]=Vhodna dejanja -Name[sr]=Акције улаза -Name[sr@Latn]=Akcije ulaza -Name[sv]=Inmatningsåtgärder -Name[ta]=உள்ளீட்டு செயல்கள் -Name[te]=ములాంశ చర్యలు -Name[tg]=Амалҳо -Name[th]=การกระทำเพื่อใส่ข้อมูล -Name[tr]=Girdi Eylemleri -Name[tt]=Kertü Ğämälläre -Name[uk]=Ввід -Name[uz]=Kiritish amallari -Name[uz@cyrillic]=Киритиш амаллари -Name[vi]=Gõ Phím nóng -Name[wa]=Accions en intrêye -Name[zh_CN]=输入动作 -Name[zh_TW]=輸入動作 - -Comment=Configure Hotkey settings -Comment[af]=Stel kortpad sleutels op -Comment[be]=Настаўленні клавішных скаротаў -Comment[bg]=Настройване на жестове с мишката -Comment[bn]=হট-কী সেটিংস কনফিগার করুন -Comment[br]=Kefluniañ dibarzhoù Hotkey -Comment[bs]=Podesite opcije kratica tastature -Comment[ca]=Configura l'arranjament de les tecles ràpides -Comment[cs]=Nastavení horkých kláves -Comment[csb]=Kònfigùracëjô klawiszowëch skrodzënów -Comment[cy]=Ffurfweddu gosodiadau BysyllBrys -Comment[da]=Opsætning af genvejstast -Comment[de]=Tastenkombinationen festlegen -Comment[el]=Ρυθμίσεις HotKeys -Comment[eo]=Agordo de klavkomando -Comment[es]=Configuración de las preferencias de Hotkey -Comment[et]=Kiirklahvide seadistused -Comment[eu]=Konfiguratu Hotkey-ren ezarpenak -Comment[fa]=پیکربندی تنظیمات کلید میانبر -Comment[fi]=Muokkaa pikanäppäinten asetuksia -Comment[fr]=Configurer les réglages des raccourcis clavier -Comment[fy]=Fluchtoetsen ynstelle -Comment[gl]=Configurar opcións de HotKeys -Comment[he]=שינוי הגדרות מקשי הקיצור -Comment[hi]=हॉट-की विन्यास कॉन्फ़िगर करें -Comment[hr]=Konfiguriranje postavki prečaca -Comment[hu]=A használható parancsok beállítása -Comment[is]=Stillingar flýtilykla -Comment[it]=Configura impostazioni di Hotkey -Comment[ja]=ホットキーの設定 -Comment[ka]=კლავიშთა კომბინაციის კონფიგურირება -Comment[kk]=Пернелер тіркесімдерді баптау -Comment[km]=កំណត់រចនាសម្ព័ន្ធការកំណត់គ្រាប់ចុចបន្ទាន់ -Comment[ko]=단축키 설정 -Comment[lt]=Konfigūruoti klavišų kombinacijų nustatymus -Comment[lv]=Konfigurē karsto taustiņu parametrus -Comment[mk]=Конфигурирајте ги поставувањата за брзите копчиња -Comment[ms]=Konfigur seting Kekunci Panas -Comment[mt]=Konfigurazzjoni tal-hotkeys -Comment[nb]=Sett opp hurtigtaster -Comment[nds]=Akschonen för besünner Ingaven instellen -Comment[ne]=हटकुञ्जी सेटिङ कन्फिगर गर्नुहोस् -Comment[nl]=Sneltoetsen instellen -Comment[nn]=Set opp snøggtastar -Comment[pa]=ਹਾਟਕੀ ਸੈਟਿੰਗ ਸੰਰਚਨਾ -Comment[pl]=Konfiguracja skrótów klawiszowych -Comment[pt]=Configurar as opções de teclas -Comment[pt_BR]=Configura definições de teclas de atalho -Comment[ro]=Configurează setările Hotkey -Comment[ru]=Настройка действий по комбинациям клавиш и росчеркам мышью -Comment[rw]=Kuboneza amagenamiterere Butozihuta -Comment[se]=Heivet jođánisboaluid -Comment[sk]=Nastavenia klávesových skratiek -Comment[sl]=Nastavitve vročih tipk -Comment[sr]=Подешавање поставки пречица -Comment[sr@Latn]=Podešavanje postavki prečica -Comment[sv]=Anpassa Hotkey-inställningar -Comment[ta]=ÍÕìÌÅ¢¨º «¨ÁôÒ¸¨Ç ¯ûǨÁ -Comment[th]=ตั้งค่าปุ่มลัด -Comment[tr]=Kısayol ayarlarını yapılandır -Comment[tt]=Qaynar töymälärne caylaw -Comment[uk]=Налаштування швидких клавіш -Comment[vi]=Cấu hình các thiết lập về phím nóng -Comment[wa]=Apontiaedjes des tchuzes Hotkeys -Comment[zh_CN]=配置热键设置 -Comment[zh_TW]=設定熱鍵設定值 - -Keywords=Keys;Global key bindings;Key bindings;Gestures;Mouse gestures; -Keywords[af]=Keys;Globale sleutel bindings;sleutel scheme;sleutel bindings;kortpaaie;application kortpaaie; -Keywords[ar]=مفايتح، مفاتيح الاختصارات العامّة، خريطة المفاتيح، مفاتيح الاختصارات، اختصارات، اختصارات تطبيقات ، حركات الفأرة; -Keywords[be]=Клавішы;Глабальныя скароты;Скароты;Рухі;Рухі мышы;Keys;Global key bindings;Key bindings;Gestures;Mouse gestures; -Keywords[bg]=бърз; клавиш; бързи; достъп; клавишна; комбинация; жестове; мишка; жест; операция; Keys; Global key bindings; Key bindings; Gestures; Mouse gestures; -Keywords[bs]=Keys;Global key bindings;Key bindings;Gestures;Mouse gestures;tipke;kratice tastature;globalne kratice tastature;geste;geste miša; -Keywords[ca]=Tecles;lligams de tecles globals;Lligams de tecles;gestos;gestos de ratolí; -Keywords[cs]=Klávesy;Globální klávesové zkratky;Schéma kláves;Klávesové zkratky;Zkratky;Gesta; -Keywords[csb]=klawisze;globalné klawiszowé skrodzënë;schemë skrodzënów;gestë;mësz; -Keywords[cy]=Bysyll;Bysellau;Rhwymiadau bysell eang;Ystumiau;Ystumiau llygoden; -Keywords[da]=Taster;Globale tastebindinger;Tastebindinger;Gester;Muse-gester; -Keywords[de]=Tasten;Tastenzuordnung;Tastenkürzel;Kurzbefehle;Tastenschema;Tastaturlayout;Gesten;Mausgesten; -Keywords[el]=Πλήκτρα;Καθολικοί συνδυασμοί πλήκτρων;Συνδυασμοί πλήκτρων;Gestures;Mouse gestures; -Keywords[eo]=klavoj;malloka;signifoj;asocioj;kombinoj;klavkombinoj;muzo; -Keywords[es]=Teclas;Asociaciones de teclas globales;Asociaciones de teclas;Gestos;Gestos del ratón; -Keywords[et]=Klahvid;Globaalsed kiirklahvid;Klahviskeem;Kiirklahvid;Klahvide seosed;Žestid;Hiirežestid; -Keywords[eu]=Teklak;Tekla elkarketa orokorrak;Tekla elkarketak;Keinuak;Saguaren keinuak; -Keywords[fa]=کلیدها، مقیدسازیهای کلید سراسری، مقیدسازیهای کلید، حرکات، حرکات موشی; -Keywords[fi]=Näppäimet;Yleiset näppäinsidokset;Näppäinteema;Näppäinsidokset;pikavalinnat;sovellusten pikavalinnat;hiirieleet; -Keywords[fr]=touches;raccourcis clavier globaux;raccourcis clavier;gestes;gestes de la souris; -Keywords[fy]=keys;toetsen;toetsenbindingen;key bindings;toetsbiningen;sneltoetsen;fluchtoetsen;globale toetsenbindingen;algemiene toetsbiningen;mouse gestures;muisgebaren;mûsstjoeringen;stjoeringen;gestures;gebaren; -Keywords[ga]=Eochracha;Ceangail chomhchoiteanna eochracha;Ceangail chomhchoiteanna;Gothaí;Gothaí luiche; -Keywords[gl]=Teclas;Atallos de teclado globais;Atallos de teclado;Xestos;Xestos co rato; -Keywords[he]=מקשים;תפקידי מקשים גלובליים;תצורת מקשים;תפקידי מקשים;קיצורים;קיצורים של יישומים; Keys;Global key bindings;Key bindings;Gestures;Mouse gestures; -Keywords[hi]=कुंजियाँ;ग्लोबल की-बाइंडिंग्स;की-बाइंडिंग्स;गेस्चर्स;माउस गेस्चर्स; -Keywords[hr]=Keys;Global key bindings;Key bindings;Gestures;Mouse gestures;Tipke;Opći prečaci tipkovnice;Prečaci tipkovnice;Gestikulacije;Gestikulacije mišem; -Keywords[hu]=billentyűk;globális billentyűparancs;billentyűparancs;műveletek;mozdulatsorok; -Keywords[is]=Lyklar;Hnappar;Flýtihnappar;Flýtilyklar;Lyklabindingar; -Keywords[it]=tasti;associazioni globali di tasti;schema di tasti;associazioni di tasti;scorciatoie;gesti;gesti mouse;mouse gesti; -Keywords[ja]=キー;グローバルキー;キーバインド;ジェスチャー;マウスジェスチャー; -Keywords[km]=គ្រាប់ចុច;ការចងគ្រាប់ចុចសកល;ការចងគ្រាប់ចុច;កាយវិការ;កាយវិការកណ្ដុរ; -Keywords[lt]=Keys;Global key bindings;Key bindings;Gestures;Mouse gestures;klavišai;klavišų sietis;klavišų schema;klavišų išdėstymas;spartieji klavišai;programų spartieji klavišai;pelės veiksmai; -Keywords[lv]=Taustiņi;Globālās taustiņu sasaistes;Taustiņu shēma;Taustiņu sasaistes;mouse gestures; -Keywords[mk]=Keys;Global key bindings;Key bindings;Gestures;Mouse gestures; Копчиња;Глобални врски на копчиња;врски на копчиња;гестови;гестови со глушец; -Keywords[nb]=Taster;generelle hurtigtaster;hurtigtaster;bevegelser;musebevegelser; -Keywords[nds]=Tasten;Globale Tastkombinatschonen;Tastschema;Tastkombinatschonen;Ingaavtekens;Muusteken; -Keywords[ne]=कुञ्जीहरू; विश्वव्यापी कुञ्जी बाइन्डिङ; कुञ्जी बाइन्डिङ; सङ्केत; माउस सङ्केत; -Keywords[nl]=keys;toetsen;toetsenbindingen;key bindings;sneltoetsen;globale toetsenbindingen;mouse gestures;muisgebaren;gestures;gebaren; -Keywords[nn]=tastar;globale snøggtastar;tasteoppsett;snøggtastar;snarvegar;programsnarvegar;rørsler;muserørsler; -Keywords[pa]=Keys;Global key bindings;Key bindings;Gestures;ਮਾਊਸ gestures; ਸਵਿੱਚਾਂ; -Keywords[pl]=klawisze;globalne skróty klawiszowe;schematy skrótów;gesty;mysz; -Keywords[pt]=teclas;teclas globais;esquema de teclas;atribuições de teclas;gestos;gestos com rato; -Keywords[pt_BR]=Teclas;Teclas de atalho globais;esquema de teclado;gestos; gestos do mouse; -Keywords[ro]=taste;asocieri globale de taste;schemă taste;asocieri taste;acceleratori;acceleratori aplicații;scurtături;gesturi; -Keywords[ru]=Keys;Global key bindings;Key bindings;Gestures;Mouse gestures;мышь;росчерк;клавиши;комбинации клавиш;действия; -Keywords[rw]=Buto;Ibyafataranyijwe urufunguzo rusange;Ibyafatanyijwe by'urufunguzo;Ibimenyetso;Ibimenyetso by'imbeba; -Keywords[se]=boalut;oppalaš jođánisboalut;boalločoahkádusat;boalločatnasat;njuolgobálgát;prográmmanjuolgabálgát;lihkádusat;sáhpánlihkádusat; -Keywords[sk]=Klávesy;Globálne klávesové skratky;schéma kláves;klávesové skratky;gestá;gestá myšou; -Keywords[sl]=tipke;globalne vezi tipk;vezi tipk;tipkovne vezi;gibi;miškini gibi; -Keywords[sr]=Keys;Global key bindings;Key scheme;Key bindings;shortcuts;application shortcuts;тастери;глобални тастери;пречица;шема тастера;пречице;програмске пречице; -Keywords[sr@Latn]=Keys;Global key bindings;Key scheme;Key bindings;shortcuts;application shortcuts;tasteri;globalni tasteri;prečica;šema tastera;prečice;programske prečice; -Keywords[sv]=tangenter;globala tangentbindningar;tangentbindningar;gester;musgester; -Keywords[ta]=விசைகள்;உலகலாவிய விசை பிணைப்புகள்;விசை திட்டம்;விசை பிணைப்புகள்;குறுக்குவழிகள்;பயன்பாட்டுக் குறுக்குவழிகள்; -Keywords[th]=ปุ่มพิมพ์;ปุ่มพิมพ์ส่วนกลาง;ชุดปุ่มพิมพ์;การจับคู่ปุ่มพิมพ์;ปุ่มพิมพ์ลัด;แป้นพิมพ์ลัด;ปุ่มพิมพ์ลัดแอพพลิเคชัน;การลากเมาส์; -Keywords[tr]=Tuşlar;Küresel tuş bağlantıları;Tuş bağlantıları;Kısayollar;Uygulama kısayolları;Fare hareketleri; -Keywords[uk]=клавіші;глобальні прив'язки клавіш;схема клавіш;прив'язка клавіш; жести; жести мишки; -Keywords[uz]=Gestures;Mouse gestures;Tugmalar;Umumiy tugmalar birikmasi;Tugmalar birikmasi; -Keywords[uz@cyrillic]=Gestures;Mouse gestures;Тугмалар;Умумий тугмалар бирикмаси;Тугмалар бирикмаси; -Keywords[vi]=Phím;tổ hợp phím toàn cục;tổ hợp phím;gõ phím;di chuyển chuột; -Keywords[wa]=Tapes;globås rascourtis;rascourtis;djesses;manire di bodjî;manire di bodjî li sori; -Keywords[zh_CN]=Keys;Global key bindings;Key bindings;Gestures;Mouse gestures;键;全局键绑定;手势;鼠标手势; -Keywords[zh_TW]=Keys;Global key bindings;Key bindings;Gestures;Mouse gestures;按鍵;全域按建連結;按鍵連結;手勢;滑鼠手勢; diff --git a/khotkeys/kcontrol/hi16-app-khotkeys.png b/khotkeys/kcontrol/hi16-app-khotkeys.png Binary files differindex 1e919e897..185d7f249 100644 --- a/khotkeys/kcontrol/hi16-app-khotkeys.png +++ b/khotkeys/kcontrol/hi16-app-khotkeys.png diff --git a/khotkeys/kcontrol/hi32-app-khotkeys.png b/khotkeys/kcontrol/hi32-app-khotkeys.png Binary files differindex b1b86f875..e8f4d0e17 100644 --- a/khotkeys/kcontrol/hi32-app-khotkeys.png +++ b/khotkeys/kcontrol/hi32-app-khotkeys.png diff --git a/khotkeys/khotkeys.desktop b/khotkeys/khotkeys.desktop deleted file mode 100644 index e1e3e1732..000000000 --- a/khotkeys/khotkeys.desktop +++ /dev/null @@ -1,2 +0,0 @@ -[Desktop Entry] -Hidden=true diff --git a/kicker/applets/clock/lcd.png b/kicker/applets/clock/lcd.png Binary files differindex 32e5e90d8..b240a405a 100644 --- a/kicker/applets/clock/lcd.png +++ b/kicker/applets/clock/lcd.png diff --git a/kicker/applets/naughty/naughty-happy.png b/kicker/applets/naughty/naughty-happy.png Binary files differindex 3200b5270..4c3505dfc 100644 --- a/kicker/applets/naughty/naughty-happy.png +++ b/kicker/applets/naughty/naughty-happy.png diff --git a/kicker/applets/naughty/naughty-sad.png b/kicker/applets/naughty/naughty-sad.png Binary files differindex 9b6541907..ae6d727f2 100644 --- a/kicker/applets/naughty/naughty-sad.png +++ b/kicker/applets/naughty/naughty-sad.png diff --git a/kicker/applets/systemtray/systemtrayapplet.cpp b/kicker/applets/systemtray/systemtrayapplet.cpp index 41d5af10b..97b71d1b2 100644 --- a/kicker/applets/systemtray/systemtrayapplet.cpp +++ b/kicker/applets/systemtray/systemtrayapplet.cpp @@ -100,6 +100,7 @@ SystemTrayApplet::SystemTrayApplet(const TQString& configFile, Type type, int ac m_clockApplet = new ClockApplet(configFile, KPanelApplet::Normal, KPanelApplet::Preferences, this, "clockapplet"); updateClockGeometry(); connect(m_clockApplet, TQT_SIGNAL(clockReconfigured()), this, TQT_SLOT(updateClockGeometry())); + connect(m_clockApplet, TQT_SIGNAL(updateLayout()), this, TQT_SLOT(updateClockGeometry())); setBackgroundOrigin(AncestorOrigin); @@ -116,7 +117,17 @@ SystemTrayApplet::SystemTrayApplet(const TQString& configFile, Type type, int ac void SystemTrayApplet::updateClockGeometry() { if (m_clockApplet) - m_clockApplet->setFixedSize(m_clockApplet->widthForHeight(height()-2),height()-2); + { + m_clockApplet->setPosition(position()); + if (orientation() == Qt::Horizontal) + { + m_clockApplet->setFixedSize(m_clockApplet->widthForHeight(height()),height()); + } + else + { + m_clockApplet->setFixedSize(width(),m_clockApplet->heightForWidth(width())); + } + } } void SystemTrayApplet::initialize() @@ -547,9 +558,9 @@ void SystemTrayApplet::embedWindow( WId w, bool kde_tray ) delete emb; return; } - + connect(emb, TQT_SIGNAL(embeddedWindowDestroyed()), TQT_SLOT(updateTrayWindows())); - emb->getIconSize(m_iconSize); + emb->setFixedSize(m_iconSize, m_iconSize); if (shouldHide(w)) { @@ -1142,22 +1153,6 @@ TrayEmbed::~TrayEmbed() // } -void TrayEmbed::getIconSize(int defaultIconSize) -{ - TQSize minSize = minimumSizeHint(); - - int width = minSize.width(); - int height = minSize.height(); - - if (width < 1 || width > defaultIconSize) - width = defaultIconSize; - if (height < 1 || height > defaultIconSize) - height = defaultIconSize; - - setFixedSize(width, height); - setBackground(); -} - void TrayEmbed::setBackground() { const TQPixmap *pbg = parentWidget()->backgroundPixmap(); diff --git a/kicker/applets/systemtray/systemtrayapplet.h b/kicker/applets/systemtray/systemtrayapplet.h index 250480b65..e311a1bdd 100644 --- a/kicker/applets/systemtray/systemtrayapplet.h +++ b/kicker/applets/systemtray/systemtrayapplet.h @@ -131,7 +131,6 @@ public: ~TrayEmbed(); bool kdeTray() const { return kde_tray; } void setBackground(); - void getIconSize(int defaultIconSize); private: bool kde_tray; TQWidget *m_scaledWidget; diff --git a/kicker/data/app_start_anim/disk1.png b/kicker/data/app_start_anim/disk1.png Binary files differindex 37262272e..aa361bddd 100644 --- a/kicker/data/app_start_anim/disk1.png +++ b/kicker/data/app_start_anim/disk1.png diff --git a/kicker/data/app_start_anim/disk10.png b/kicker/data/app_start_anim/disk10.png Binary files differindex 6f5c65d54..a6da557d5 100644 --- a/kicker/data/app_start_anim/disk10.png +++ b/kicker/data/app_start_anim/disk10.png diff --git a/kicker/data/app_start_anim/disk2.png b/kicker/data/app_start_anim/disk2.png Binary files differindex cac143984..db2c9968f 100644 --- a/kicker/data/app_start_anim/disk2.png +++ b/kicker/data/app_start_anim/disk2.png diff --git a/kicker/data/app_start_anim/disk3.png b/kicker/data/app_start_anim/disk3.png Binary files differindex 7cfc09c84..fa1ceb9da 100644 --- a/kicker/data/app_start_anim/disk3.png +++ b/kicker/data/app_start_anim/disk3.png diff --git a/kicker/data/app_start_anim/disk4.png b/kicker/data/app_start_anim/disk4.png Binary files differindex 0de1cf4e7..aa5d883ac 100644 --- a/kicker/data/app_start_anim/disk4.png +++ b/kicker/data/app_start_anim/disk4.png diff --git a/kicker/data/app_start_anim/disk5.png b/kicker/data/app_start_anim/disk5.png Binary files differindex 62e26f497..135344765 100644 --- a/kicker/data/app_start_anim/disk5.png +++ b/kicker/data/app_start_anim/disk5.png diff --git a/kicker/data/app_start_anim/disk6.png b/kicker/data/app_start_anim/disk6.png Binary files differindex 1bd210ffc..65b63cf4c 100644 --- a/kicker/data/app_start_anim/disk6.png +++ b/kicker/data/app_start_anim/disk6.png diff --git a/kicker/data/app_start_anim/disk7.png b/kicker/data/app_start_anim/disk7.png Binary files differindex a992322a4..26cedf88c 100644 --- a/kicker/data/app_start_anim/disk7.png +++ b/kicker/data/app_start_anim/disk7.png diff --git a/kicker/data/app_start_anim/disk8.png b/kicker/data/app_start_anim/disk8.png Binary files differindex b9c86a0b8..eab2fd793 100644 --- a/kicker/data/app_start_anim/disk8.png +++ b/kicker/data/app_start_anim/disk8.png diff --git a/kicker/data/app_start_anim/disk9.png b/kicker/data/app_start_anim/disk9.png Binary files differindex 6bbbb2258..52118d5d7 100644 --- a/kicker/data/app_start_anim/disk9.png +++ b/kicker/data/app_start_anim/disk9.png diff --git a/kicker/data/icons/actions/cr16-action-modified.png b/kicker/data/icons/actions/cr16-action-modified.png Binary files differindex 41b3f4367..c4e7831da 100644 --- a/kicker/data/icons/actions/cr16-action-modified.png +++ b/kicker/data/icons/actions/cr16-action-modified.png diff --git a/kicker/data/icons/actions/lo16-action-modified.png b/kicker/data/icons/actions/lo16-action-modified.png Binary files differindex 63c705f00..69d2f236c 100644 --- a/kicker/data/icons/actions/lo16-action-modified.png +++ b/kicker/data/icons/actions/lo16-action-modified.png diff --git a/kicker/data/icons/cr16-app-kdisknav.png b/kicker/data/icons/cr16-app-kdisknav.png Binary files differindex 3ba8a1416..c38975125 100644 --- a/kicker/data/icons/cr16-app-kdisknav.png +++ b/kicker/data/icons/cr16-app-kdisknav.png diff --git a/kicker/data/icons/cr16-app-kicker.png b/kicker/data/icons/cr16-app-kicker.png Binary files differindex 0d04030fc..2331a29e0 100644 --- a/kicker/data/icons/cr16-app-kicker.png +++ b/kicker/data/icons/cr16-app-kicker.png diff --git a/kicker/data/icons/cr16-app-panel.png b/kicker/data/icons/cr16-app-panel.png Binary files differindex 0d04030fc..2331a29e0 100644 --- a/kicker/data/icons/cr16-app-panel.png +++ b/kicker/data/icons/cr16-app-panel.png diff --git a/kicker/data/icons/cr16-app-window_list.png b/kicker/data/icons/cr16-app-window_list.png Binary files differindex d8afab4b2..33439e716 100644 --- a/kicker/data/icons/cr16-app-window_list.png +++ b/kicker/data/icons/cr16-app-window_list.png diff --git a/kicker/data/icons/cr32-app-kdisknav.png b/kicker/data/icons/cr32-app-kdisknav.png Binary files differindex 370de627f..452302379 100644 --- a/kicker/data/icons/cr32-app-kdisknav.png +++ b/kicker/data/icons/cr32-app-kdisknav.png diff --git a/kicker/data/icons/cr32-app-window_list.png b/kicker/data/icons/cr32-app-window_list.png Binary files differindex f8d64d1df..2de7c18db 100644 --- a/kicker/data/icons/cr32-app-window_list.png +++ b/kicker/data/icons/cr32-app-window_list.png diff --git a/kicker/data/icons/cr48-app-kdisknav.png b/kicker/data/icons/cr48-app-kdisknav.png Binary files differindex fbc259e95..8c1ae5c1f 100644 --- a/kicker/data/icons/cr48-app-kdisknav.png +++ b/kicker/data/icons/cr48-app-kdisknav.png diff --git a/kicker/data/icons/cr48-app-window_list.png b/kicker/data/icons/cr48-app-window_list.png Binary files differindex ca164a12a..f19da6616 100644 --- a/kicker/data/icons/cr48-app-window_list.png +++ b/kicker/data/icons/cr48-app-window_list.png diff --git a/kicker/data/kickoff/button-box-gradient-topdown.png b/kicker/data/kickoff/button-box-gradient-topdown.png Binary files differindex 378816342..366cbf573 100644 --- a/kicker/data/kickoff/button-box-gradient-topdown.png +++ b/kicker/data/kickoff/button-box-gradient-topdown.png diff --git a/kicker/data/kickoff/button-box-gradient.png b/kicker/data/kickoff/button-box-gradient.png Binary files differindex a7c11adba..2057c4ac3 100644 --- a/kicker/data/kickoff/button-box-gradient.png +++ b/kicker/data/kickoff/button-box-gradient.png diff --git a/kicker/data/kickoff/button-box-left-corner.png b/kicker/data/kickoff/button-box-left-corner.png Binary files differindex c4080cb00..5a64ba1a2 100644 --- a/kicker/data/kickoff/button-box-left-corner.png +++ b/kicker/data/kickoff/button-box-left-corner.png diff --git a/kicker/data/kickoff/button-box-left.png b/kicker/data/kickoff/button-box-left.png Binary files differindex 3b532f8bd..9eb49030e 100644 --- a/kicker/data/kickoff/button-box-left.png +++ b/kicker/data/kickoff/button-box-left.png diff --git a/kicker/data/kickoff/button-box-right-corner.png b/kicker/data/kickoff/button-box-right-corner.png Binary files differindex ef44b1fab..8ee01581b 100644 --- a/kicker/data/kickoff/button-box-right-corner.png +++ b/kicker/data/kickoff/button-box-right-corner.png diff --git a/kicker/data/kickoff/button-box-top.png b/kicker/data/kickoff/button-box-top.png Binary files differindex 1cac298be..5bf01a58e 100644 --- a/kicker/data/kickoff/button-box-top.png +++ b/kicker/data/kickoff/button-box-top.png diff --git a/kicker/data/kickoff/cr128-action-suspend2disk.png b/kicker/data/kickoff/cr128-action-suspend2disk.png Binary files differindex b3ac2fe05..bb3b41464 100644 --- a/kicker/data/kickoff/cr128-action-suspend2disk.png +++ b/kicker/data/kickoff/cr128-action-suspend2disk.png diff --git a/kicker/data/kickoff/cr128-action-suspend2ram.png b/kicker/data/kickoff/cr128-action-suspend2ram.png Binary files differindex 9e641bd47..edbf6a609 100644 --- a/kicker/data/kickoff/cr128-action-suspend2ram.png +++ b/kicker/data/kickoff/cr128-action-suspend2ram.png diff --git a/kicker/data/kickoff/cr16-action-suspend2disk.png b/kicker/data/kickoff/cr16-action-suspend2disk.png Binary files differindex a28ab8ad9..b938e8acf 100644 --- a/kicker/data/kickoff/cr16-action-suspend2disk.png +++ b/kicker/data/kickoff/cr16-action-suspend2disk.png diff --git a/kicker/data/kickoff/cr16-action-suspend2ram.png b/kicker/data/kickoff/cr16-action-suspend2ram.png Binary files differindex 45738ccc5..58a129514 100644 --- a/kicker/data/kickoff/cr16-action-suspend2ram.png +++ b/kicker/data/kickoff/cr16-action-suspend2ram.png diff --git a/kicker/data/kickoff/cr32-action-leave.png b/kicker/data/kickoff/cr32-action-leave.png Binary files differindex 89dc15953..e1430411b 100644 --- a/kicker/data/kickoff/cr32-action-leave.png +++ b/kicker/data/kickoff/cr32-action-leave.png diff --git a/kicker/data/kickoff/cr32-action-suspend2disk.png b/kicker/data/kickoff/cr32-action-suspend2disk.png Binary files differindex 7bcb027b1..a1b36de9b 100644 --- a/kicker/data/kickoff/cr32-action-suspend2disk.png +++ b/kicker/data/kickoff/cr32-action-suspend2disk.png diff --git a/kicker/data/kickoff/cr32-action-suspend2ram.png b/kicker/data/kickoff/cr32-action-suspend2ram.png Binary files differindex 7a96cd24f..9b9e90eb0 100644 --- a/kicker/data/kickoff/cr32-action-suspend2ram.png +++ b/kicker/data/kickoff/cr32-action-suspend2ram.png diff --git a/kicker/data/kickoff/cr48-action-leave.png b/kicker/data/kickoff/cr48-action-leave.png Binary files differindex 7c01634b9..459505ed9 100644 --- a/kicker/data/kickoff/cr48-action-leave.png +++ b/kicker/data/kickoff/cr48-action-leave.png diff --git a/kicker/data/kickoff/cr48-action-suspend2disk.png b/kicker/data/kickoff/cr48-action-suspend2disk.png Binary files differindex 9ff2148b8..f617eafbb 100644 --- a/kicker/data/kickoff/cr48-action-suspend2disk.png +++ b/kicker/data/kickoff/cr48-action-suspend2disk.png diff --git a/kicker/data/kickoff/cr48-action-suspend2ram.png b/kicker/data/kickoff/cr48-action-suspend2ram.png Binary files differindex 2aefa6ce4..770256eb9 100644 --- a/kicker/data/kickoff/cr48-action-suspend2ram.png +++ b/kicker/data/kickoff/cr48-action-suspend2ram.png diff --git a/kicker/data/kickoff/cr48-app-recently_used.png b/kicker/data/kickoff/cr48-app-recently_used.png Binary files differindex b97479759..b879f928b 100644 --- a/kicker/data/kickoff/cr48-app-recently_used.png +++ b/kicker/data/kickoff/cr48-app-recently_used.png diff --git a/kicker/data/kickoff/cr64-action-suspend2disk.png b/kicker/data/kickoff/cr64-action-suspend2disk.png Binary files differindex f6e57d786..fd3ea9293 100644 --- a/kicker/data/kickoff/cr64-action-suspend2disk.png +++ b/kicker/data/kickoff/cr64-action-suspend2disk.png diff --git a/kicker/data/kickoff/cr64-action-suspend2ram.png b/kicker/data/kickoff/cr64-action-suspend2ram.png Binary files differindex cdb47d04f..695f3f06a 100644 --- a/kicker/data/kickoff/cr64-action-suspend2ram.png +++ b/kicker/data/kickoff/cr64-action-suspend2ram.png diff --git a/kicker/data/kickoff/kmenu_basic.png b/kicker/data/kickoff/kmenu_basic.png Binary files differindex 37f13f8af..4674a03ac 100644 --- a/kicker/data/kickoff/kmenu_basic.png +++ b/kicker/data/kickoff/kmenu_basic.png diff --git a/kicker/data/kickoff/left_triangle.png b/kicker/data/kickoff/left_triangle.png Binary files differindex b8ac404fd..ca532c37f 100644 --- a/kicker/data/kickoff/left_triangle.png +++ b/kicker/data/kickoff/left_triangle.png diff --git a/kicker/data/kickoff/main_border_bc.png b/kicker/data/kickoff/main_border_bc.png Binary files differindex 05e497763..42b80f938 100644 --- a/kicker/data/kickoff/main_border_bc.png +++ b/kicker/data/kickoff/main_border_bc.png diff --git a/kicker/data/kickoff/main_border_lc.png b/kicker/data/kickoff/main_border_lc.png Binary files differindex c440e859e..9e20bd2fa 100644 --- a/kicker/data/kickoff/main_border_lc.png +++ b/kicker/data/kickoff/main_border_lc.png diff --git a/kicker/data/kickoff/main_border_rc.png b/kicker/data/kickoff/main_border_rc.png Binary files differindex 6cef8af01..e08386ca9 100644 --- a/kicker/data/kickoff/main_border_rc.png +++ b/kicker/data/kickoff/main_border_rc.png diff --git a/kicker/data/kickoff/main_border_tc.png b/kicker/data/kickoff/main_border_tc.png Binary files differindex bc03e85dd..50aaf0feb 100644 --- a/kicker/data/kickoff/main_border_tc.png +++ b/kicker/data/kickoff/main_border_tc.png diff --git a/kicker/data/kickoff/main_corner_bl.png b/kicker/data/kickoff/main_corner_bl.png Binary files differindex 32ea680f1..fdaaa785e 100644 --- a/kicker/data/kickoff/main_corner_bl.png +++ b/kicker/data/kickoff/main_corner_bl.png diff --git a/kicker/data/kickoff/main_corner_br.png b/kicker/data/kickoff/main_corner_br.png Binary files differindex b2d898ab6..6304a6880 100644 --- a/kicker/data/kickoff/main_corner_br.png +++ b/kicker/data/kickoff/main_corner_br.png diff --git a/kicker/data/kickoff/main_corner_tl.png b/kicker/data/kickoff/main_corner_tl.png Binary files differindex 11fe645ce..f5a357260 100644 --- a/kicker/data/kickoff/main_corner_tl.png +++ b/kicker/data/kickoff/main_corner_tl.png diff --git a/kicker/data/kickoff/main_corner_tr.png b/kicker/data/kickoff/main_corner_tr.png Binary files differindex a439d9763..6d67b1fce 100644 --- a/kicker/data/kickoff/main_corner_tr.png +++ b/kicker/data/kickoff/main_corner_tr.png diff --git a/kicker/data/kickoff/menu_separator.png b/kicker/data/kickoff/menu_separator.png Binary files differindex 2ba13727d..f4d42ed7b 100644 --- a/kicker/data/kickoff/menu_separator.png +++ b/kicker/data/kickoff/menu_separator.png diff --git a/kicker/data/kickoff/resize_handle.png b/kicker/data/kickoff/resize_handle.png Binary files differindex c0811dc50..96679a1ae 100644 --- a/kicker/data/kickoff/resize_handle.png +++ b/kicker/data/kickoff/resize_handle.png diff --git a/kicker/data/kickoff/right_triangle.png b/kicker/data/kickoff/right_triangle.png Binary files differindex 9766030c0..818480665 100644 --- a/kicker/data/kickoff/right_triangle.png +++ b/kicker/data/kickoff/right_triangle.png diff --git a/kicker/data/kickoff/search-gradient-topdown.png b/kicker/data/kickoff/search-gradient-topdown.png Binary files differindex b13a19290..c3dda9839 100644 --- a/kicker/data/kickoff/search-gradient-topdown.png +++ b/kicker/data/kickoff/search-gradient-topdown.png diff --git a/kicker/data/kickoff/search-gradient.png b/kicker/data/kickoff/search-gradient.png Binary files differindex 3478ea18b..16cdcf7d9 100644 --- a/kicker/data/kickoff/search-gradient.png +++ b/kicker/data/kickoff/search-gradient.png diff --git a/kicker/data/kickoff/search-tab-center.png b/kicker/data/kickoff/search-tab-center.png Binary files differindex 26ec2f2e9..56201a3e3 100644 --- a/kicker/data/kickoff/search-tab-center.png +++ b/kicker/data/kickoff/search-tab-center.png diff --git a/kicker/data/kickoff/search-tab-left.png b/kicker/data/kickoff/search-tab-left.png Binary files differindex 507b41767..a13d4cea1 100644 --- a/kicker/data/kickoff/search-tab-left.png +++ b/kicker/data/kickoff/search-tab-left.png diff --git a/kicker/data/kickoff/search-tab-right.png b/kicker/data/kickoff/search-tab-right.png Binary files differindex 94a410443..e774a8bde 100644 --- a/kicker/data/kickoff/search-tab-right.png +++ b/kicker/data/kickoff/search-tab-right.png diff --git a/kicker/data/kickoff/search-tab-top-center.png b/kicker/data/kickoff/search-tab-top-center.png Binary files differindex 51482ad23..5000605f8 100644 --- a/kicker/data/kickoff/search-tab-top-center.png +++ b/kicker/data/kickoff/search-tab-top-center.png diff --git a/kicker/data/kickoff/search-tab-top-left.png b/kicker/data/kickoff/search-tab-top-left.png Binary files differindex 97264782a..9eddc5ea4 100644 --- a/kicker/data/kickoff/search-tab-top-left.png +++ b/kicker/data/kickoff/search-tab-top-left.png diff --git a/kicker/data/kickoff/search-tab-top-right.png b/kicker/data/kickoff/search-tab-top-right.png Binary files differindex fc80f40c2..f23658928 100644 --- a/kicker/data/kickoff/search-tab-top-right.png +++ b/kicker/data/kickoff/search-tab-top-right.png diff --git a/kicker/data/kickoff/tab-bottom-left-topdown.png b/kicker/data/kickoff/tab-bottom-left-topdown.png Binary files differindex a96a7bf12..96428a509 100644 --- a/kicker/data/kickoff/tab-bottom-left-topdown.png +++ b/kicker/data/kickoff/tab-bottom-left-topdown.png diff --git a/kicker/data/kickoff/tab-bottom-right-topdown.png b/kicker/data/kickoff/tab-bottom-right-topdown.png Binary files differindex d1d80a6b3..54c8c12f3 100644 --- a/kicker/data/kickoff/tab-bottom-right-topdown.png +++ b/kicker/data/kickoff/tab-bottom-right-topdown.png diff --git a/kicker/data/kickoff/tab-bottom-right.png b/kicker/data/kickoff/tab-bottom-right.png Binary files differindex 86d226b51..f3bd6a9c9 100644 --- a/kicker/data/kickoff/tab-bottom-right.png +++ b/kicker/data/kickoff/tab-bottom-right.png diff --git a/kicker/data/kickoff/tab-center-topdown.png b/kicker/data/kickoff/tab-center-topdown.png Binary files differindex c35438d91..c94d74d66 100644 --- a/kicker/data/kickoff/tab-center-topdown.png +++ b/kicker/data/kickoff/tab-center-topdown.png diff --git a/kicker/data/kickoff/tab-center.png b/kicker/data/kickoff/tab-center.png Binary files differindex 0ef1f6d34..00ed99525 100644 --- a/kicker/data/kickoff/tab-center.png +++ b/kicker/data/kickoff/tab-center.png diff --git a/kicker/data/kickoff/tab-left_center.png b/kicker/data/kickoff/tab-left_center.png Binary files differindex 4c8c39794..9fc26b72c 100644 --- a/kicker/data/kickoff/tab-left_center.png +++ b/kicker/data/kickoff/tab-left_center.png diff --git a/kicker/data/kickoff/tab-right_center.png b/kicker/data/kickoff/tab-right_center.png Binary files differindex 3df6564f4..e1048e772 100644 --- a/kicker/data/kickoff/tab-right_center.png +++ b/kicker/data/kickoff/tab-right_center.png diff --git a/kicker/data/kickoff/tab-top-left-topdown.png b/kicker/data/kickoff/tab-top-left-topdown.png Binary files differindex 3df580e1d..bad9595a9 100644 --- a/kicker/data/kickoff/tab-top-left-topdown.png +++ b/kicker/data/kickoff/tab-top-left-topdown.png diff --git a/kicker/data/kickoff/tab-top-left.png b/kicker/data/kickoff/tab-top-left.png Binary files differindex 910967a18..34376ddf3 100644 --- a/kicker/data/kickoff/tab-top-left.png +++ b/kicker/data/kickoff/tab-top-left.png diff --git a/kicker/data/kickoff/tab-top-right-topdown.png b/kicker/data/kickoff/tab-top-right-topdown.png Binary files differindex dd672cad9..5c9cbe4a8 100644 --- a/kicker/data/kickoff/tab-top-right-topdown.png +++ b/kicker/data/kickoff/tab-top-right-topdown.png diff --git a/kicker/data/kickoff/tab-top-right.png b/kicker/data/kickoff/tab-top-right.png Binary files differindex e96019d6d..a1eed6fc9 100644 --- a/kicker/data/kickoff/tab-top-right.png +++ b/kicker/data/kickoff/tab-top-right.png diff --git a/kicker/data/kmenu_side/kside.png b/kicker/data/kmenu_side/kside.png Binary files differindex 8ae29c175..dc07a0570 100644 --- a/kicker/data/kmenu_side/kside.png +++ b/kicker/data/kmenu_side/kside.png diff --git a/kicker/data/kmenu_side/kside_top_left.png b/kicker/data/kmenu_side/kside_top_left.png Binary files differindex 38a527aef..9f7632484 100644 --- a/kicker/data/kmenu_side/kside_top_left.png +++ b/kicker/data/kmenu_side/kside_top_left.png diff --git a/kicker/data/kmenu_side/kside_top_right.png b/kicker/data/kmenu_side/kside_top_right.png Binary files differindex d6ea97fd9..464f2998e 100644 --- a/kicker/data/kmenu_side/kside_top_right.png +++ b/kicker/data/kmenu_side/kside_top_right.png diff --git a/kicker/data/kmenu_side/kside_top_tile.png b/kicker/data/kmenu_side/kside_top_tile.png Binary files differindex 08ddb6712..6bd44ee00 100644 --- a/kicker/data/kmenu_side/kside_top_tile.png +++ b/kicker/data/kmenu_side/kside_top_tile.png diff --git a/kicker/data/tiles/KDE_button_large_down.png b/kicker/data/tiles/KDE_button_large_down.png Binary files differindex 726095c45..35b9067d0 100644 --- a/kicker/data/tiles/KDE_button_large_down.png +++ b/kicker/data/tiles/KDE_button_large_down.png diff --git a/kicker/data/tiles/KDE_button_large_up.png b/kicker/data/tiles/KDE_button_large_up.png Binary files differindex 83a540f85..f8be4e3c1 100644 --- a/kicker/data/tiles/KDE_button_large_up.png +++ b/kicker/data/tiles/KDE_button_large_up.png diff --git a/kicker/data/tiles/KDE_button_normal_down.png b/kicker/data/tiles/KDE_button_normal_down.png Binary files differindex 35a848bf7..b3ddbfb04 100644 --- a/kicker/data/tiles/KDE_button_normal_down.png +++ b/kicker/data/tiles/KDE_button_normal_down.png diff --git a/kicker/data/tiles/KDE_button_normal_up.png b/kicker/data/tiles/KDE_button_normal_up.png Binary files differindex 304940fb1..4102f1c95 100644 --- a/kicker/data/tiles/KDE_button_normal_up.png +++ b/kicker/data/tiles/KDE_button_normal_up.png diff --git a/kicker/data/tiles/KDE_button_tiny_down.png b/kicker/data/tiles/KDE_button_tiny_down.png Binary files differindex 356d4498b..d879b1a2d 100644 --- a/kicker/data/tiles/KDE_button_tiny_down.png +++ b/kicker/data/tiles/KDE_button_tiny_down.png diff --git a/kicker/data/tiles/KDE_button_tiny_up.png b/kicker/data/tiles/KDE_button_tiny_up.png Binary files differindex aec67c344..e005948a7 100644 --- a/kicker/data/tiles/KDE_button_tiny_up.png +++ b/kicker/data/tiles/KDE_button_tiny_up.png diff --git a/kicker/data/tiles/blue_wood_large_down.png b/kicker/data/tiles/blue_wood_large_down.png Binary files differindex 576ad41e6..8f140fbf8 100644 --- a/kicker/data/tiles/blue_wood_large_down.png +++ b/kicker/data/tiles/blue_wood_large_down.png diff --git a/kicker/data/tiles/blue_wood_large_up.png b/kicker/data/tiles/blue_wood_large_up.png Binary files differindex f82f9f291..661a20716 100644 --- a/kicker/data/tiles/blue_wood_large_up.png +++ b/kicker/data/tiles/blue_wood_large_up.png diff --git a/kicker/data/tiles/blue_wood_normal_down.png b/kicker/data/tiles/blue_wood_normal_down.png Binary files differindex 8ba8e91cf..a0f338fe5 100644 --- a/kicker/data/tiles/blue_wood_normal_down.png +++ b/kicker/data/tiles/blue_wood_normal_down.png diff --git a/kicker/data/tiles/blue_wood_normal_up.png b/kicker/data/tiles/blue_wood_normal_up.png Binary files differindex 9ba633c5f..f146b305a 100644 --- a/kicker/data/tiles/blue_wood_normal_up.png +++ b/kicker/data/tiles/blue_wood_normal_up.png diff --git a/kicker/data/tiles/blue_wood_tiny_down.png b/kicker/data/tiles/blue_wood_tiny_down.png Binary files differindex 0a034c005..343c12a92 100644 --- a/kicker/data/tiles/blue_wood_tiny_down.png +++ b/kicker/data/tiles/blue_wood_tiny_down.png diff --git a/kicker/data/tiles/blue_wood_tiny_up.png b/kicker/data/tiles/blue_wood_tiny_up.png Binary files differindex 37bafb97f..592076385 100644 --- a/kicker/data/tiles/blue_wood_tiny_up.png +++ b/kicker/data/tiles/blue_wood_tiny_up.png diff --git a/kicker/data/tiles/green_wood_large_down.png b/kicker/data/tiles/green_wood_large_down.png Binary files differindex 0601d563a..050e74542 100644 --- a/kicker/data/tiles/green_wood_large_down.png +++ b/kicker/data/tiles/green_wood_large_down.png diff --git a/kicker/data/tiles/green_wood_large_up.png b/kicker/data/tiles/green_wood_large_up.png Binary files differindex f48f6a256..739df3406 100644 --- a/kicker/data/tiles/green_wood_large_up.png +++ b/kicker/data/tiles/green_wood_large_up.png diff --git a/kicker/data/tiles/green_wood_normal_down.png b/kicker/data/tiles/green_wood_normal_down.png Binary files differindex 10163ed80..7ba0a7f2d 100644 --- a/kicker/data/tiles/green_wood_normal_down.png +++ b/kicker/data/tiles/green_wood_normal_down.png diff --git a/kicker/data/tiles/green_wood_normal_up.png b/kicker/data/tiles/green_wood_normal_up.png Binary files differindex 479a3544c..417697feb 100644 --- a/kicker/data/tiles/green_wood_normal_up.png +++ b/kicker/data/tiles/green_wood_normal_up.png diff --git a/kicker/data/tiles/green_wood_tiny_down.png b/kicker/data/tiles/green_wood_tiny_down.png Binary files differindex aa026aaed..c451246a1 100644 --- a/kicker/data/tiles/green_wood_tiny_down.png +++ b/kicker/data/tiles/green_wood_tiny_down.png diff --git a/kicker/data/tiles/green_wood_tiny_up.png b/kicker/data/tiles/green_wood_tiny_up.png Binary files differindex ff6d6885a..c94e14088 100644 --- a/kicker/data/tiles/green_wood_tiny_up.png +++ b/kicker/data/tiles/green_wood_tiny_up.png diff --git a/kicker/data/tiles/light_gray_large_down.png b/kicker/data/tiles/light_gray_large_down.png Binary files differindex c73e8196f..3b24ada26 100644 --- a/kicker/data/tiles/light_gray_large_down.png +++ b/kicker/data/tiles/light_gray_large_down.png diff --git a/kicker/data/tiles/light_gray_large_up.png b/kicker/data/tiles/light_gray_large_up.png Binary files differindex 88f4055be..f9685d657 100644 --- a/kicker/data/tiles/light_gray_large_up.png +++ b/kicker/data/tiles/light_gray_large_up.png diff --git a/kicker/data/tiles/light_gray_normal_up.png b/kicker/data/tiles/light_gray_normal_up.png Binary files differindex cec9a04b1..4da0c04fb 100644 --- a/kicker/data/tiles/light_gray_normal_up.png +++ b/kicker/data/tiles/light_gray_normal_up.png diff --git a/kicker/data/tiles/light_gray_tiny_down.png b/kicker/data/tiles/light_gray_tiny_down.png Binary files differindex e462814e5..b5a00ae1b 100644 --- a/kicker/data/tiles/light_gray_tiny_down.png +++ b/kicker/data/tiles/light_gray_tiny_down.png diff --git a/kicker/data/tiles/light_gray_tiny_up.png b/kicker/data/tiles/light_gray_tiny_up.png Binary files differindex 39a2b7017..a79a09776 100644 --- a/kicker/data/tiles/light_gray_tiny_up.png +++ b/kicker/data/tiles/light_gray_tiny_up.png diff --git a/kicker/data/tiles/light_green_large_down.png b/kicker/data/tiles/light_green_large_down.png Binary files differindex e5c556b9e..3c3179a7d 100644 --- a/kicker/data/tiles/light_green_large_down.png +++ b/kicker/data/tiles/light_green_large_down.png diff --git a/kicker/data/tiles/light_green_large_up.png b/kicker/data/tiles/light_green_large_up.png Binary files differindex 20c45b134..2c656dfc4 100644 --- a/kicker/data/tiles/light_green_large_up.png +++ b/kicker/data/tiles/light_green_large_up.png diff --git a/kicker/data/tiles/light_green_normal_down.png b/kicker/data/tiles/light_green_normal_down.png Binary files differindex 1aecad3eb..a19f53314 100644 --- a/kicker/data/tiles/light_green_normal_down.png +++ b/kicker/data/tiles/light_green_normal_down.png diff --git a/kicker/data/tiles/light_green_normal_up.png b/kicker/data/tiles/light_green_normal_up.png Binary files differindex d3947b32a..f77002536 100644 --- a/kicker/data/tiles/light_green_normal_up.png +++ b/kicker/data/tiles/light_green_normal_up.png diff --git a/kicker/data/tiles/light_green_tiny_down.png b/kicker/data/tiles/light_green_tiny_down.png Binary files differindex 910bcf8f6..ddecf0954 100644 --- a/kicker/data/tiles/light_green_tiny_down.png +++ b/kicker/data/tiles/light_green_tiny_down.png diff --git a/kicker/data/tiles/light_green_tiny_up.png b/kicker/data/tiles/light_green_tiny_up.png Binary files differindex 98194ff3f..40988bf31 100644 --- a/kicker/data/tiles/light_green_tiny_up.png +++ b/kicker/data/tiles/light_green_tiny_up.png diff --git a/kicker/data/tiles/light_pastel_large_down.png b/kicker/data/tiles/light_pastel_large_down.png Binary files differindex 1a542f814..36b0db882 100644 --- a/kicker/data/tiles/light_pastel_large_down.png +++ b/kicker/data/tiles/light_pastel_large_down.png diff --git a/kicker/data/tiles/light_pastel_large_up.png b/kicker/data/tiles/light_pastel_large_up.png Binary files differindex b920125df..92e2247e4 100644 --- a/kicker/data/tiles/light_pastel_large_up.png +++ b/kicker/data/tiles/light_pastel_large_up.png diff --git a/kicker/data/tiles/light_pastel_normal_up.png b/kicker/data/tiles/light_pastel_normal_up.png Binary files differindex a7840d3a8..06c0ce637 100644 --- a/kicker/data/tiles/light_pastel_normal_up.png +++ b/kicker/data/tiles/light_pastel_normal_up.png diff --git a/kicker/data/tiles/light_pastel_tiny_down.png b/kicker/data/tiles/light_pastel_tiny_down.png Binary files differindex 85af54c59..7d57d466f 100644 --- a/kicker/data/tiles/light_pastel_tiny_down.png +++ b/kicker/data/tiles/light_pastel_tiny_down.png diff --git a/kicker/data/tiles/light_pastel_tiny_up.png b/kicker/data/tiles/light_pastel_tiny_up.png Binary files differindex 9267620f3..875740e0e 100644 --- a/kicker/data/tiles/light_pastel_tiny_up.png +++ b/kicker/data/tiles/light_pastel_tiny_up.png diff --git a/kicker/data/tiles/light_purple_large_down.png b/kicker/data/tiles/light_purple_large_down.png Binary files differindex 0246b87c4..1245e6de3 100644 --- a/kicker/data/tiles/light_purple_large_down.png +++ b/kicker/data/tiles/light_purple_large_down.png diff --git a/kicker/data/tiles/light_purple_large_up.png b/kicker/data/tiles/light_purple_large_up.png Binary files differindex 4ef4b9746..49f4de017 100644 --- a/kicker/data/tiles/light_purple_large_up.png +++ b/kicker/data/tiles/light_purple_large_up.png diff --git a/kicker/data/tiles/light_purple_normal_down.png b/kicker/data/tiles/light_purple_normal_down.png Binary files differindex 858e2cda5..eb84290a8 100644 --- a/kicker/data/tiles/light_purple_normal_down.png +++ b/kicker/data/tiles/light_purple_normal_down.png diff --git a/kicker/data/tiles/light_purple_normal_up.png b/kicker/data/tiles/light_purple_normal_up.png Binary files differindex c064e1827..3d0806dca 100644 --- a/kicker/data/tiles/light_purple_normal_up.png +++ b/kicker/data/tiles/light_purple_normal_up.png diff --git a/kicker/data/tiles/light_purple_tiny_down.png b/kicker/data/tiles/light_purple_tiny_down.png Binary files differindex 8a44988d4..f7657784e 100644 --- a/kicker/data/tiles/light_purple_tiny_down.png +++ b/kicker/data/tiles/light_purple_tiny_down.png diff --git a/kicker/data/tiles/light_purple_tiny_up.png b/kicker/data/tiles/light_purple_tiny_up.png Binary files differindex 9a8af02cc..5d9982292 100644 --- a/kicker/data/tiles/light_purple_tiny_up.png +++ b/kicker/data/tiles/light_purple_tiny_up.png diff --git a/kicker/data/tiles/nuts_and_bolts_large_down.png b/kicker/data/tiles/nuts_and_bolts_large_down.png Binary files differindex 120a63d78..9d378e856 100644 --- a/kicker/data/tiles/nuts_and_bolts_large_down.png +++ b/kicker/data/tiles/nuts_and_bolts_large_down.png diff --git a/kicker/data/tiles/nuts_and_bolts_large_up.png b/kicker/data/tiles/nuts_and_bolts_large_up.png Binary files differindex 42713ed07..c18956486 100644 --- a/kicker/data/tiles/nuts_and_bolts_large_up.png +++ b/kicker/data/tiles/nuts_and_bolts_large_up.png diff --git a/kicker/data/tiles/nuts_and_bolts_normal_down.png b/kicker/data/tiles/nuts_and_bolts_normal_down.png Binary files differindex f7ddb9ff9..bcad75618 100644 --- a/kicker/data/tiles/nuts_and_bolts_normal_down.png +++ b/kicker/data/tiles/nuts_and_bolts_normal_down.png diff --git a/kicker/data/tiles/nuts_and_bolts_normal_up.png b/kicker/data/tiles/nuts_and_bolts_normal_up.png Binary files differindex b8252631c..2f3eee734 100644 --- a/kicker/data/tiles/nuts_and_bolts_normal_up.png +++ b/kicker/data/tiles/nuts_and_bolts_normal_up.png diff --git a/kicker/data/tiles/nuts_and_bolts_tiny_down.png b/kicker/data/tiles/nuts_and_bolts_tiny_down.png Binary files differindex 97a990cb9..0d537bb61 100644 --- a/kicker/data/tiles/nuts_and_bolts_tiny_down.png +++ b/kicker/data/tiles/nuts_and_bolts_tiny_down.png diff --git a/kicker/data/tiles/nuts_and_bolts_tiny_up.png b/kicker/data/tiles/nuts_and_bolts_tiny_up.png Binary files differindex 63e962c02..8eb7433f3 100644 --- a/kicker/data/tiles/nuts_and_bolts_tiny_up.png +++ b/kicker/data/tiles/nuts_and_bolts_tiny_up.png diff --git a/kicker/data/tiles/red_wood_large_down.png b/kicker/data/tiles/red_wood_large_down.png Binary files differindex c066f1d94..550b36756 100644 --- a/kicker/data/tiles/red_wood_large_down.png +++ b/kicker/data/tiles/red_wood_large_down.png diff --git a/kicker/data/tiles/red_wood_large_up.png b/kicker/data/tiles/red_wood_large_up.png Binary files differindex 646bb9c54..d8137634e 100644 --- a/kicker/data/tiles/red_wood_large_up.png +++ b/kicker/data/tiles/red_wood_large_up.png diff --git a/kicker/data/tiles/red_wood_normal_down.png b/kicker/data/tiles/red_wood_normal_down.png Binary files differindex 6091a488a..e9dd9c3a6 100644 --- a/kicker/data/tiles/red_wood_normal_down.png +++ b/kicker/data/tiles/red_wood_normal_down.png diff --git a/kicker/data/tiles/red_wood_normal_up.png b/kicker/data/tiles/red_wood_normal_up.png Binary files differindex 805f19a1d..51f4c3342 100644 --- a/kicker/data/tiles/red_wood_normal_up.png +++ b/kicker/data/tiles/red_wood_normal_up.png diff --git a/kicker/data/tiles/red_wood_tiny_down.png b/kicker/data/tiles/red_wood_tiny_down.png Binary files differindex 6a2b31ee0..8b81c17b9 100644 --- a/kicker/data/tiles/red_wood_tiny_down.png +++ b/kicker/data/tiles/red_wood_tiny_down.png diff --git a/kicker/data/tiles/red_wood_tiny_up.png b/kicker/data/tiles/red_wood_tiny_up.png Binary files differindex c2eb24b41..fdd3d8a30 100644 --- a/kicker/data/tiles/red_wood_tiny_up.png +++ b/kicker/data/tiles/red_wood_tiny_up.png diff --git a/kicker/data/tiles/solid_blue_large_down.png b/kicker/data/tiles/solid_blue_large_down.png Binary files differindex 81f4f5391..60d755ef0 100644 --- a/kicker/data/tiles/solid_blue_large_down.png +++ b/kicker/data/tiles/solid_blue_large_down.png diff --git a/kicker/data/tiles/solid_blue_large_up.png b/kicker/data/tiles/solid_blue_large_up.png Binary files differindex b815150cb..b66b1e0e7 100644 --- a/kicker/data/tiles/solid_blue_large_up.png +++ b/kicker/data/tiles/solid_blue_large_up.png diff --git a/kicker/data/tiles/solid_blue_normal_down.png b/kicker/data/tiles/solid_blue_normal_down.png Binary files differindex 8fe6caea0..8ce15b4d5 100644 --- a/kicker/data/tiles/solid_blue_normal_down.png +++ b/kicker/data/tiles/solid_blue_normal_down.png diff --git a/kicker/data/tiles/solid_blue_normal_up.png b/kicker/data/tiles/solid_blue_normal_up.png Binary files differindex 54dce1c53..9e89fd9c1 100644 --- a/kicker/data/tiles/solid_blue_normal_up.png +++ b/kicker/data/tiles/solid_blue_normal_up.png diff --git a/kicker/data/tiles/solid_blue_tiny_down.png b/kicker/data/tiles/solid_blue_tiny_down.png Binary files differindex c4a7559e8..7263838c8 100644 --- a/kicker/data/tiles/solid_blue_tiny_down.png +++ b/kicker/data/tiles/solid_blue_tiny_down.png diff --git a/kicker/data/tiles/solid_blue_tiny_up.png b/kicker/data/tiles/solid_blue_tiny_up.png Binary files differindex c6ad68fb2..912779e13 100644 --- a/kicker/data/tiles/solid_blue_tiny_up.png +++ b/kicker/data/tiles/solid_blue_tiny_up.png diff --git a/kicker/data/tiles/solid_gray_large_down.png b/kicker/data/tiles/solid_gray_large_down.png Binary files differindex b90ea5edf..f0e77d547 100644 --- a/kicker/data/tiles/solid_gray_large_down.png +++ b/kicker/data/tiles/solid_gray_large_down.png diff --git a/kicker/data/tiles/solid_gray_large_up.png b/kicker/data/tiles/solid_gray_large_up.png Binary files differindex 221c70060..1d72e1020 100644 --- a/kicker/data/tiles/solid_gray_large_up.png +++ b/kicker/data/tiles/solid_gray_large_up.png diff --git a/kicker/data/tiles/solid_gray_normal_down.png b/kicker/data/tiles/solid_gray_normal_down.png Binary files differindex 80418d7dd..b5c667900 100644 --- a/kicker/data/tiles/solid_gray_normal_down.png +++ b/kicker/data/tiles/solid_gray_normal_down.png diff --git a/kicker/data/tiles/solid_gray_normal_up.png b/kicker/data/tiles/solid_gray_normal_up.png Binary files differindex ecd4809f2..f442d04f2 100644 --- a/kicker/data/tiles/solid_gray_normal_up.png +++ b/kicker/data/tiles/solid_gray_normal_up.png diff --git a/kicker/data/tiles/solid_gray_tiny_down.png b/kicker/data/tiles/solid_gray_tiny_down.png Binary files differindex a230fd0b8..6a4b695c5 100644 --- a/kicker/data/tiles/solid_gray_tiny_down.png +++ b/kicker/data/tiles/solid_gray_tiny_down.png diff --git a/kicker/data/tiles/solid_gray_tiny_up.png b/kicker/data/tiles/solid_gray_tiny_up.png Binary files differindex 24896cc7d..fd9ee6790 100644 --- a/kicker/data/tiles/solid_gray_tiny_up.png +++ b/kicker/data/tiles/solid_gray_tiny_up.png diff --git a/kicker/data/tiles/solid_green_large_down.png b/kicker/data/tiles/solid_green_large_down.png Binary files differindex d5797dc47..104c4c3b3 100644 --- a/kicker/data/tiles/solid_green_large_down.png +++ b/kicker/data/tiles/solid_green_large_down.png diff --git a/kicker/data/tiles/solid_green_large_up.png b/kicker/data/tiles/solid_green_large_up.png Binary files differindex 09075cfb8..60ec37ff7 100644 --- a/kicker/data/tiles/solid_green_large_up.png +++ b/kicker/data/tiles/solid_green_large_up.png diff --git a/kicker/data/tiles/solid_green_normal_down.png b/kicker/data/tiles/solid_green_normal_down.png Binary files differindex 8756acbe6..b9a1b65db 100644 --- a/kicker/data/tiles/solid_green_normal_down.png +++ b/kicker/data/tiles/solid_green_normal_down.png diff --git a/kicker/data/tiles/solid_green_normal_up.png b/kicker/data/tiles/solid_green_normal_up.png Binary files differindex 8fd958039..7b6569603 100644 --- a/kicker/data/tiles/solid_green_normal_up.png +++ b/kicker/data/tiles/solid_green_normal_up.png diff --git a/kicker/data/tiles/solid_green_tiny_down.png b/kicker/data/tiles/solid_green_tiny_down.png Binary files differindex 6d3807e5b..d49cabeb7 100644 --- a/kicker/data/tiles/solid_green_tiny_down.png +++ b/kicker/data/tiles/solid_green_tiny_down.png diff --git a/kicker/data/tiles/solid_green_tiny_up.png b/kicker/data/tiles/solid_green_tiny_up.png Binary files differindex 98245a2c5..35ba32800 100644 --- a/kicker/data/tiles/solid_green_tiny_up.png +++ b/kicker/data/tiles/solid_green_tiny_up.png diff --git a/kicker/data/tiles/solid_orange_large_down.png b/kicker/data/tiles/solid_orange_large_down.png Binary files differindex 00ee670da..7daf9eb04 100644 --- a/kicker/data/tiles/solid_orange_large_down.png +++ b/kicker/data/tiles/solid_orange_large_down.png diff --git a/kicker/data/tiles/solid_orange_large_up.png b/kicker/data/tiles/solid_orange_large_up.png Binary files differindex a301c985e..50200bf9d 100644 --- a/kicker/data/tiles/solid_orange_large_up.png +++ b/kicker/data/tiles/solid_orange_large_up.png diff --git a/kicker/data/tiles/solid_orange_normal_down.png b/kicker/data/tiles/solid_orange_normal_down.png Binary files differindex 447d425d0..d9c4793ee 100644 --- a/kicker/data/tiles/solid_orange_normal_down.png +++ b/kicker/data/tiles/solid_orange_normal_down.png diff --git a/kicker/data/tiles/solid_orange_normal_up.png b/kicker/data/tiles/solid_orange_normal_up.png Binary files differindex 666395837..5e1350ee7 100644 --- a/kicker/data/tiles/solid_orange_normal_up.png +++ b/kicker/data/tiles/solid_orange_normal_up.png diff --git a/kicker/data/tiles/solid_orange_tiny_down.png b/kicker/data/tiles/solid_orange_tiny_down.png Binary files differindex be5e4b1ec..c5332ff6d 100644 --- a/kicker/data/tiles/solid_orange_tiny_down.png +++ b/kicker/data/tiles/solid_orange_tiny_down.png diff --git a/kicker/data/tiles/solid_orange_tiny_up.png b/kicker/data/tiles/solid_orange_tiny_up.png Binary files differindex 4b3217397..f3be3895d 100644 --- a/kicker/data/tiles/solid_orange_tiny_up.png +++ b/kicker/data/tiles/solid_orange_tiny_up.png diff --git a/kicker/data/tiles/solid_pastel_large_down.png b/kicker/data/tiles/solid_pastel_large_down.png Binary files differindex fde6462e8..f04438101 100644 --- a/kicker/data/tiles/solid_pastel_large_down.png +++ b/kicker/data/tiles/solid_pastel_large_down.png diff --git a/kicker/data/tiles/solid_pastel_large_up.png b/kicker/data/tiles/solid_pastel_large_up.png Binary files differindex 191522e59..d56853b70 100644 --- a/kicker/data/tiles/solid_pastel_large_up.png +++ b/kicker/data/tiles/solid_pastel_large_up.png diff --git a/kicker/data/tiles/solid_pastel_normal_down.png b/kicker/data/tiles/solid_pastel_normal_down.png Binary files differindex caf2c287e..f29c9fdc8 100644 --- a/kicker/data/tiles/solid_pastel_normal_down.png +++ b/kicker/data/tiles/solid_pastel_normal_down.png diff --git a/kicker/data/tiles/solid_pastel_normal_up.png b/kicker/data/tiles/solid_pastel_normal_up.png Binary files differindex 7c7a1efd0..7ea683b33 100644 --- a/kicker/data/tiles/solid_pastel_normal_up.png +++ b/kicker/data/tiles/solid_pastel_normal_up.png diff --git a/kicker/data/tiles/solid_pastel_tiny_down.png b/kicker/data/tiles/solid_pastel_tiny_down.png Binary files differindex 5ac0212cc..66bb8dcc3 100644 --- a/kicker/data/tiles/solid_pastel_tiny_down.png +++ b/kicker/data/tiles/solid_pastel_tiny_down.png diff --git a/kicker/data/tiles/solid_pastel_tiny_up.png b/kicker/data/tiles/solid_pastel_tiny_up.png Binary files differindex 52078b2b5..df6ec5ae5 100644 --- a/kicker/data/tiles/solid_pastel_tiny_up.png +++ b/kicker/data/tiles/solid_pastel_tiny_up.png diff --git a/kicker/data/tiles/solid_purple_large_down.png b/kicker/data/tiles/solid_purple_large_down.png Binary files differindex af85fb076..87c14ce38 100644 --- a/kicker/data/tiles/solid_purple_large_down.png +++ b/kicker/data/tiles/solid_purple_large_down.png diff --git a/kicker/data/tiles/solid_purple_large_up.png b/kicker/data/tiles/solid_purple_large_up.png Binary files differindex 12146c4cb..460c46ee2 100644 --- a/kicker/data/tiles/solid_purple_large_up.png +++ b/kicker/data/tiles/solid_purple_large_up.png diff --git a/kicker/data/tiles/solid_purple_normal_down.png b/kicker/data/tiles/solid_purple_normal_down.png Binary files differindex 80c14518e..803639721 100644 --- a/kicker/data/tiles/solid_purple_normal_down.png +++ b/kicker/data/tiles/solid_purple_normal_down.png diff --git a/kicker/data/tiles/solid_purple_normal_up.png b/kicker/data/tiles/solid_purple_normal_up.png Binary files differindex 7682cd19b..277f8902d 100644 --- a/kicker/data/tiles/solid_purple_normal_up.png +++ b/kicker/data/tiles/solid_purple_normal_up.png diff --git a/kicker/data/tiles/solid_purple_tiny_down.png b/kicker/data/tiles/solid_purple_tiny_down.png Binary files differindex 6badb34c1..053332724 100644 --- a/kicker/data/tiles/solid_purple_tiny_down.png +++ b/kicker/data/tiles/solid_purple_tiny_down.png diff --git a/kicker/data/tiles/solid_purple_tiny_up.png b/kicker/data/tiles/solid_purple_tiny_up.png Binary files differindex ce3dcfb05..7a1e64061 100644 --- a/kicker/data/tiles/solid_purple_tiny_up.png +++ b/kicker/data/tiles/solid_purple_tiny_up.png diff --git a/kicker/data/tiles/solid_red_large_down.png b/kicker/data/tiles/solid_red_large_down.png Binary files differindex 2ed284974..9f254d89d 100644 --- a/kicker/data/tiles/solid_red_large_down.png +++ b/kicker/data/tiles/solid_red_large_down.png diff --git a/kicker/data/tiles/solid_red_large_up.png b/kicker/data/tiles/solid_red_large_up.png Binary files differindex 35f60bb23..995e972f9 100644 --- a/kicker/data/tiles/solid_red_large_up.png +++ b/kicker/data/tiles/solid_red_large_up.png diff --git a/kicker/data/tiles/solid_red_normal_down.png b/kicker/data/tiles/solid_red_normal_down.png Binary files differindex 1d1069c31..e7cbe85d7 100644 --- a/kicker/data/tiles/solid_red_normal_down.png +++ b/kicker/data/tiles/solid_red_normal_down.png diff --git a/kicker/data/tiles/solid_red_normal_up.png b/kicker/data/tiles/solid_red_normal_up.png Binary files differindex 87e08e59d..011143443 100644 --- a/kicker/data/tiles/solid_red_normal_up.png +++ b/kicker/data/tiles/solid_red_normal_up.png diff --git a/kicker/data/tiles/solid_red_tiny_down.png b/kicker/data/tiles/solid_red_tiny_down.png Binary files differindex 722e872bc..33802daf2 100644 --- a/kicker/data/tiles/solid_red_tiny_down.png +++ b/kicker/data/tiles/solid_red_tiny_down.png diff --git a/kicker/data/tiles/solid_red_tiny_up.png b/kicker/data/tiles/solid_red_tiny_up.png Binary files differindex 82e086f58..020ecdd5b 100644 --- a/kicker/data/tiles/solid_red_tiny_up.png +++ b/kicker/data/tiles/solid_red_tiny_up.png diff --git a/kicker/data/tiles/solid_tigereye_large_down.png b/kicker/data/tiles/solid_tigereye_large_down.png Binary files differindex 118e6f85a..10c37c107 100644 --- a/kicker/data/tiles/solid_tigereye_large_down.png +++ b/kicker/data/tiles/solid_tigereye_large_down.png diff --git a/kicker/data/tiles/solid_tigereye_large_up.png b/kicker/data/tiles/solid_tigereye_large_up.png Binary files differindex e36984860..f451d98f4 100644 --- a/kicker/data/tiles/solid_tigereye_large_up.png +++ b/kicker/data/tiles/solid_tigereye_large_up.png diff --git a/kicker/data/tiles/solid_tigereye_normal_down.png b/kicker/data/tiles/solid_tigereye_normal_down.png Binary files differindex 43c805dd3..ac726563a 100644 --- a/kicker/data/tiles/solid_tigereye_normal_down.png +++ b/kicker/data/tiles/solid_tigereye_normal_down.png diff --git a/kicker/data/tiles/solid_tigereye_normal_up.png b/kicker/data/tiles/solid_tigereye_normal_up.png Binary files differindex c81466b53..f2466a286 100644 --- a/kicker/data/tiles/solid_tigereye_normal_up.png +++ b/kicker/data/tiles/solid_tigereye_normal_up.png diff --git a/kicker/data/tiles/solid_tigereye_tiny_down.png b/kicker/data/tiles/solid_tigereye_tiny_down.png Binary files differindex 0b5e242c8..757f7b0b2 100644 --- a/kicker/data/tiles/solid_tigereye_tiny_down.png +++ b/kicker/data/tiles/solid_tigereye_tiny_down.png diff --git a/kicker/data/tiles/solid_tigereye_tiny_up.png b/kicker/data/tiles/solid_tigereye_tiny_up.png Binary files differindex f086cc329..5ddffabfe 100644 --- a/kicker/data/tiles/solid_tigereye_tiny_up.png +++ b/kicker/data/tiles/solid_tigereye_tiny_up.png diff --git a/kicker/data/wallpaper/deck_plate.png b/kicker/data/wallpaper/deck_plate.png Binary files differindex f79be9c12..dd58df401 100644 --- a/kicker/data/wallpaper/deck_plate.png +++ b/kicker/data/wallpaper/deck_plate.png diff --git a/kicker/data/wallpaper/default.png b/kicker/data/wallpaper/default.png Binary files differindex 0c9c1810c..e1332641d 100644 --- a/kicker/data/wallpaper/default.png +++ b/kicker/data/wallpaper/default.png diff --git a/kicker/data/wallpaper/green_line.png b/kicker/data/wallpaper/green_line.png Binary files differindex 43a34599c..0554f8f4e 100644 --- a/kicker/data/wallpaper/green_line.png +++ b/kicker/data/wallpaper/green_line.png diff --git a/kicker/data/wallpaper/rail.png b/kicker/data/wallpaper/rail.png Binary files differindex 6b558cdba..3b20ccfb0 100644 --- a/kicker/data/wallpaper/rail.png +++ b/kicker/data/wallpaper/rail.png diff --git a/kicker/kicker/ui/k_new_mnu.cpp b/kicker/kicker/ui/k_new_mnu.cpp index cdb542a31..fb13a9067 100644 --- a/kicker/kicker/ui/k_new_mnu.cpp +++ b/kicker/kicker/ui/k_new_mnu.cpp @@ -140,6 +140,17 @@ #define DOC_ID_BASE 10 + (IDS_PER_CATEGORY * 12) #define OTHER_ID_BASE 10 + (IDS_PER_CATEGORY * 13) +namespace SuspendType { +enum SuspendType { + NotSpecified = 0, + Freeze, + Standby, + Suspend, + Hibernate, + HybridSuspend +}; +}; + static TQString calculate(const TQString &exp) { TQString result, cmd; @@ -1345,11 +1356,11 @@ void KMenu::insertStaticExitItems() m_exitView->leftView()->insertSeparator( nId++, i18n("Session"), index++ ); if (kapp->authorize("logout")) - m_exitView->leftView()->insertItem( "edit-undo", i18n( "Logout" ), - i18n( "End session" ), "kicker:/logout", nId++, index++ ); + m_exitView->leftView()->insertItem( "edit-undo", i18n( "Log out" ), + i18n( "End current session" ), "kicker:/logout", nId++, index++ ); if (kapp->authorize("lock_screen")) m_exitView->leftView()->insertItem( "system-lock-screen", i18n( "Lock" ), - i18n( "Lock screen" ), "kicker:/lock", nId++, index++ ); + i18n( "Lock computer screen" ), "kicker:/lock", nId++, index++ ); TDEConfig ksmserver("ksmserverrc", false, false); ksmserver.setGroup("General"); @@ -1380,11 +1391,11 @@ void KMenu::insertStaticExitItems() if ( maysd ) { m_exitView->leftView()->insertSeparator( nId++, i18n("System"), index++ ); - m_exitView->leftView()->insertItem( "system-log-out", i18n( "Shutdown Computer" ), + m_exitView->leftView()->insertItem( "system-log-out", i18n( "Shutdown" ), i18n( "Turn off computer" ), "kicker:/shutdown", nId++, index++ ); - m_exitView->leftView()->insertItem( "reload", i18n( "&Restart Computer" ).replace("&",""), - i18n( "Restart and boot the default system" ), + m_exitView->leftView()->insertItem( "reload", i18n( "&Restart" ).replace("&",""), + i18n( "Restart computer and boot the default system" ), "kicker:/restart", nId++, index++ ); insertSuspendOption(nId, index); @@ -2725,17 +2736,20 @@ void KMenu::slotStartURL(const TQString& u) kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,TQString)", params); } - else if ( u == "kicker:/suspend_disk" ) { - slotSuspend( 1 ); + else if ( u == "kicker:/suspend_freeze" ) { + slotSuspend( SuspendType::Freeze ); + } + else if ( u == "kicker:/standby" ) { + slotSuspend( SuspendType::Standby ); } else if ( u == "kicker:/suspend_ram" ) { - slotSuspend( 2 ); + slotSuspend( SuspendType::Suspend ); } - else if ( u == "kicker:/suspend_freeze" ) { - slotSuspend( 4 ); + else if ( u == "kicker:/suspend_disk" ) { + slotSuspend( SuspendType::Hibernate ); } - else if ( u == "kicker:/standby" ) { - slotSuspend( 3 ); + else if ( u == "kicker:/hybrid_suspend" ) { + slotSuspend( SuspendType::HybridSuspend ); } else if ( u == "kicker:/savesession" ) { TQByteArray data; @@ -3800,6 +3814,7 @@ void KMenu::insertSuspendOption( int &nId, int &index ) bool suspend_freeze = false; bool standby = false; bool suspend_disk = false; + bool hybrid_suspend = false; #if defined(COMPILE_HALBACKEND) suspend_ram = libhal_device_get_property_bool(m_halCtx, "/org/freedesktop/Hal/devices/computer", @@ -3815,6 +3830,11 @@ void KMenu::insertSuspendOption( int &nId, int &index ) "/org/freedesktop/Hal/devices/computer", "power_management.can_hibernate", NULL); + + hybrid_suspend = libhal_device_get_property_bool(m_halCtx, + "/org/freedesktop/Hal/devices/computer", + "power_management.can_suspend_hybrid", + NULL); #elif defined(__TDE_HAVE_TDEHWLIB) // COMPILE_HALBACKEND TDERootSystemDevice* rootDevice = TDEGlobal::hardwareDevices()->rootSystemDevice(); if (rootDevice) { @@ -3822,44 +3842,55 @@ void KMenu::insertSuspendOption( int &nId, int &index ) suspend_freeze = rootDevice->canFreeze(); standby = rootDevice->canStandby(); suspend_disk = rootDevice->canHibernate(); + hybrid_suspend = rootDevice->canHybridSuspend(); } #endif + m_exitView->leftView()->insertSeparator( nId++, i18n("Suspend"), index++ ); + // respect disable suspend/hibernate settings from power-manager TDEConfig config("power-managerrc"); bool disableSuspend = config.readBoolEntry("disableSuspend", false); bool disableHibernate = config.readBoolEntry("disableHibernate", false); - if ( suspend_disk && !disableHibernate ) { + if ( suspend_freeze && !disableSuspend ) { m_exitView->leftView()->insertItem( - "suspend2disk", - i18n( "Suspend to Disk" ), + "suspend2ram", + i18n( "Freeze" ), + i18n( "Put the computer in software idle mode" ), + "kicker:/suspend_freeze", nId++, index++ ); + } + + if ( standby && !disableSuspend ) { + m_exitView->leftView()->insertItem( + "media-playback-pause", + i18n( "Standby" ), i18n( "Pause without logging out" ), - "kicker:/suspend_disk", nId++, index++ ); + "kicker:/standby", nId++, index++ ); } if ( suspend_ram && !disableSuspend ) { m_exitView->leftView()->insertItem( "suspend2ram", + i18n( "Sleep" ), i18n( "Suspend to RAM" ), - i18n( "Pause without logging out" ), "kicker:/suspend_ram", nId++, index++ ); } - if ( suspend_freeze && !disableSuspend ) { + if ( suspend_disk && !disableHibernate ) { m_exitView->leftView()->insertItem( - "suspend2ram", - i18n( "Freeze" ), - i18n( "Pause without logging out" ), - "kicker:/suspend_freeze", nId++, index++ ); + "suspend2disk", + i18n( "Hibernate" ), + i18n( "Suspend to Disk" ), + "kicker:/suspend_disk", nId++, index++ ); } - if ( standby && !disableSuspend ) { + if ( hybrid_suspend && !disableSuspend && !disableHibernate ) { m_exitView->leftView()->insertItem( - "media-playback-pause", - i18n( "Standby" ), - i18n( "Pause without logging out" ), - "kicker:/standby", nId++, index++ ); + "suspend2disk", + i18n( "Hybrid Suspend" ), + i18n( "Suspend to RAM + Disk" ), + "kicker:/hybrid_suspend", nId++, index++ ); } } @@ -3880,13 +3911,14 @@ void KMenu::slotSuspend(int id) DBusMessage* msg = NULL; if (m_dbusConn) { - if (id == 1) { + // No Freeze support in HAL + if (id == SuspendType::Standby) { msg = dbus_message_new_method_call( "org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", - "Hibernate"); - } else if (id == 2) { + "Standby"); + } else if (id == SuspendType::Suspend) { msg = dbus_message_new_method_call( "org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", @@ -3894,12 +3926,20 @@ void KMenu::slotSuspend(int id) "Suspend"); int wakeup=0; dbus_message_append_args(msg, DBUS_TYPE_INT32, &wakeup, DBUS_TYPE_INVALID); - } else if (id == 3) { + } else if (id == SuspendType::Hibernate) { msg = dbus_message_new_method_call( "org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", - "Standby"); + "Hibernate"); + } else if (id == SuspendType::HybridSuspend) { + msg = dbus_message_new_method_call( + "org.freedesktop.Hal", + "/org/freedesktop/Hal/devices/computer", + "org.freedesktop.Hal.Device.SystemPowerManagement", + "SuspendHybrid"); + int wakeup=0; + dbus_message_append_args(msg, DBUS_TYPE_INT32, &wakeup, DBUS_TYPE_INVALID); } else { return; } @@ -3912,14 +3952,16 @@ void KMenu::slotSuspend(int id) #elif defined(__TDE_HAVE_TDEHWLIB) // COMPILE_HALBACKEND TDERootSystemDevice* rootDevice = TDEGlobal::hardwareDevices()->rootSystemDevice(); if (rootDevice) { - if (id == 1) { - error = !rootDevice->setPowerState(TDESystemPowerState::Hibernate); - } else if (id == 2) { - error = !rootDevice->setPowerState(TDESystemPowerState::Suspend); - } else if (id == 3) { - error = !rootDevice->setPowerState(TDESystemPowerState::Standby); - } else if (id == 4) { + if (id == SuspendType::Freeze) { error = !rootDevice->setPowerState(TDESystemPowerState::Freeze); + } else if (id == SuspendType::Standby) { + error = !rootDevice->setPowerState(TDESystemPowerState::Standby); + } else if (id == SuspendType::Suspend) { + error = !rootDevice->setPowerState(TDESystemPowerState::Suspend); + } else if (id == SuspendType::Hibernate) { + error = !rootDevice->setPowerState(TDESystemPowerState::Hibernate); + } else if (id == SuspendType::HybridSuspend) { + error = !rootDevice->setPowerState(TDESystemPowerState::HybridSuspend); } else { return; } diff --git a/klipper/hi128-app-klipper.png b/klipper/hi128-app-klipper.png Binary files differindex bff59bcae..51dcba6bb 100644 --- a/klipper/hi128-app-klipper.png +++ b/klipper/hi128-app-klipper.png diff --git a/klipper/hi16-app-klipper.png b/klipper/hi16-app-klipper.png Binary files differindex 2b1fbbafe..ea8c2337c 100644 --- a/klipper/hi16-app-klipper.png +++ b/klipper/hi16-app-klipper.png diff --git a/klipper/hi22-app-klipper.png b/klipper/hi22-app-klipper.png Binary files differindex 4044ab86f..a1b8ca89b 100644 --- a/klipper/hi22-app-klipper.png +++ b/klipper/hi22-app-klipper.png diff --git a/klipper/hi32-app-klipper.png b/klipper/hi32-app-klipper.png Binary files differindex e84fa7680..cdffa2db6 100644 --- a/klipper/hi32-app-klipper.png +++ b/klipper/hi32-app-klipper.png diff --git a/klipper/hi48-app-klipper.png b/klipper/hi48-app-klipper.png Binary files differindex e808a3c2d..aeb46281c 100644 --- a/klipper/hi48-app-klipper.png +++ b/klipper/hi48-app-klipper.png diff --git a/klipper/hi64-app-klipper.png b/klipper/hi64-app-klipper.png Binary files differindex 8d966f25d..4de252ed9 100644 --- a/klipper/hi64-app-klipper.png +++ b/klipper/hi64-app-klipper.png diff --git a/klipper/klipperpopup.cpp b/klipper/klipperpopup.cpp index 41eabdbdf..5ca29ef4f 100644 --- a/klipper/klipperpopup.cpp +++ b/klipper/klipperpopup.cpp @@ -185,6 +185,7 @@ void KlipperPopup::rebuild( const TQString& filter ) { } TQRegExp filterexp( filter ); + filterexp.setCaseSensitive(false); if ( filterexp.isValid() ) { m_filterWidget->setPaletteForegroundColor( paletteForegroundColor() ); } else { diff --git a/kmenuedit/hi16-app-kmenuedit.png b/kmenuedit/hi16-app-kmenuedit.png Binary files differindex b121605f7..f614d640b 100644 --- a/kmenuedit/hi16-app-kmenuedit.png +++ b/kmenuedit/hi16-app-kmenuedit.png diff --git a/kmenuedit/hi22-app-kmenuedit.png b/kmenuedit/hi22-app-kmenuedit.png Binary files differindex 65509221a..cd4a84adf 100644 --- a/kmenuedit/hi22-app-kmenuedit.png +++ b/kmenuedit/hi22-app-kmenuedit.png diff --git a/kmenuedit/hi32-app-kmenuedit.png b/kmenuedit/hi32-app-kmenuedit.png Binary files differindex d1e532be1..8d04cf0e5 100644 --- a/kmenuedit/hi32-app-kmenuedit.png +++ b/kmenuedit/hi32-app-kmenuedit.png diff --git a/kmenuedit/hi48-app-kmenuedit.png b/kmenuedit/hi48-app-kmenuedit.png Binary files differindex e6b483a7f..d988e912f 100644 --- a/kmenuedit/hi48-app-kmenuedit.png +++ b/kmenuedit/hi48-app-kmenuedit.png diff --git a/kmenuedit/pixmaps/cr22-action-filesave_and_close.png b/kmenuedit/pixmaps/cr22-action-filesave_and_close.png Binary files differindex 7d4b6f365..38ced989c 100644 --- a/kmenuedit/pixmaps/cr22-action-filesave_and_close.png +++ b/kmenuedit/pixmaps/cr22-action-filesave_and_close.png diff --git a/kmenuedit/pixmaps/cr22-action-menu_new.png b/kmenuedit/pixmaps/cr22-action-menu_new.png Binary files differindex 56613f41c..4399e125f 100644 --- a/kmenuedit/pixmaps/cr22-action-menu_new.png +++ b/kmenuedit/pixmaps/cr22-action-menu_new.png diff --git a/kmenuedit/pixmaps/cr22-action-menu_new_sep.png b/kmenuedit/pixmaps/cr22-action-menu_new_sep.png Binary files differindex bff0ce6d0..e16aca368 100644 --- a/kmenuedit/pixmaps/cr22-action-menu_new_sep.png +++ b/kmenuedit/pixmaps/cr22-action-menu_new_sep.png diff --git a/kmenuedit/pixmaps/cr32-action-menu_new.png b/kmenuedit/pixmaps/cr32-action-menu_new.png Binary files differindex d1e532be1..8d04cf0e5 100644 --- a/kmenuedit/pixmaps/cr32-action-menu_new.png +++ b/kmenuedit/pixmaps/cr32-action-menu_new.png diff --git a/kmenuedit/pixmaps/cr32-action-menu_new_sep.png b/kmenuedit/pixmaps/cr32-action-menu_new_sep.png Binary files differindex ff02e1d2b..fcb79e70e 100644 --- a/kmenuedit/pixmaps/cr32-action-menu_new_sep.png +++ b/kmenuedit/pixmaps/cr32-action-menu_new_sep.png diff --git a/kmenuedit/pixmaps/lo16-action-menu_new.png b/kmenuedit/pixmaps/lo16-action-menu_new.png Binary files differindex b121605f7..f614d640b 100644 --- a/kmenuedit/pixmaps/lo16-action-menu_new.png +++ b/kmenuedit/pixmaps/lo16-action-menu_new.png diff --git a/knetattach/hi128-app-knetattach.png b/knetattach/hi128-app-knetattach.png Binary files differindex 9fb0d1fb2..131b29915 100644 --- a/knetattach/hi128-app-knetattach.png +++ b/knetattach/hi128-app-knetattach.png diff --git a/knetattach/hi16-app-knetattach.png b/knetattach/hi16-app-knetattach.png Binary files differindex 3c5dbdf05..52db3b0ca 100644 --- a/knetattach/hi16-app-knetattach.png +++ b/knetattach/hi16-app-knetattach.png diff --git a/knetattach/hi22-app-knetattach.png b/knetattach/hi22-app-knetattach.png Binary files differindex eb61b0f3b..f69ffae6b 100644 --- a/knetattach/hi22-app-knetattach.png +++ b/knetattach/hi22-app-knetattach.png diff --git a/knetattach/hi32-app-knetattach.png b/knetattach/hi32-app-knetattach.png Binary files differindex a3ee15c4a..48e64e069 100644 --- a/knetattach/hi32-app-knetattach.png +++ b/knetattach/hi32-app-knetattach.png diff --git a/knetattach/hi48-app-knetattach.png b/knetattach/hi48-app-knetattach.png Binary files differindex 76e8f92f5..b6bc33930 100644 --- a/knetattach/hi48-app-knetattach.png +++ b/knetattach/hi48-app-knetattach.png diff --git a/knetattach/hi64-app-knetattach.png b/knetattach/hi64-app-knetattach.png Binary files differindex 839300b99..36d93079b 100644 --- a/knetattach/hi64-app-knetattach.png +++ b/knetattach/hi64-app-knetattach.png diff --git a/konqueror/about/box-centre-konqueror.png b/konqueror/about/box-centre-konqueror.png Binary files differindex d8dde840f..aeeb11625 100755..100644 --- a/konqueror/about/box-centre-konqueror.png +++ b/konqueror/about/box-centre-konqueror.png diff --git a/konqueror/about/lightning.png b/konqueror/about/lightning.png Binary files differindex 40bfbcfbb..c0434fad5 100644 --- a/konqueror/about/lightning.png +++ b/konqueror/about/lightning.png diff --git a/konqueror/about/top-right-konqueror.png b/konqueror/about/top-right-konqueror.png Binary files differindex 453de1f6a..f685d4a3c 100644 --- a/konqueror/about/top-right-konqueror.png +++ b/konqueror/about/top-right-konqueror.png diff --git a/konqueror/iconview/konq_iconview.cc b/konqueror/iconview/konq_iconview.cc index 595c02948..5efc1e751 100644 --- a/konqueror/iconview/konq_iconview.cc +++ b/konqueror/iconview/konq_iconview.cc @@ -557,10 +557,15 @@ void KonqKfmIconView::slotSelect() m_pIconView->blockSignals( true ); TQIconViewItem *it = m_pIconView->firstItem(); - while ( it ) - { - if ( re.exactMatch( it->text() ) ) - it->setSelected( true, true ); + while ( it ) { + if ( it->isVisible() ) { + if ( re.exactMatch( it->text() ) ) { + it->setSelected( true, true ); + } + } + else { + it->setSelected( false, true ); + } it = it->nextItem(); } @@ -584,10 +589,15 @@ void KonqKfmIconView::slotUnselect() m_pIconView->blockSignals( true ); TQIconViewItem *it = m_pIconView->firstItem(); - while ( it ) - { - if ( re.exactMatch( it->text() ) ) - it->setSelected( false, true ); + while ( it ) { + if ( it->isVisible() ) { + if ( re.exactMatch( it->text() ) ) { + it->setSelected( false, true ); + } + } + else { + it->setSelected( false, true ); + } it = it->nextItem(); } diff --git a/konqueror/keditbookmarks/cr16-app-keditbookmarks.png b/konqueror/keditbookmarks/cr16-app-keditbookmarks.png Binary files differindex 6a3fc5efe..79b941ae5 100644 --- a/konqueror/keditbookmarks/cr16-app-keditbookmarks.png +++ b/konqueror/keditbookmarks/cr16-app-keditbookmarks.png diff --git a/konqueror/keditbookmarks/cr32-app-keditbookmarks.png b/konqueror/keditbookmarks/cr32-app-keditbookmarks.png Binary files differindex b7e10c47f..6515c682b 100644 --- a/konqueror/keditbookmarks/cr32-app-keditbookmarks.png +++ b/konqueror/keditbookmarks/cr32-app-keditbookmarks.png diff --git a/konqueror/keditbookmarks/cr48-app-keditbookmarks.png b/konqueror/keditbookmarks/cr48-app-keditbookmarks.png Binary files differindex d1f5e91cc..73f0dfd24 100644 --- a/konqueror/keditbookmarks/cr48-app-keditbookmarks.png +++ b/konqueror/keditbookmarks/cr48-app-keditbookmarks.png diff --git a/konqueror/keditbookmarks/cr64-app-keditbookmarks.png b/konqueror/keditbookmarks/cr64-app-keditbookmarks.png Binary files differindex 8f2504942..d1147a86d 100644 --- a/konqueror/keditbookmarks/cr64-app-keditbookmarks.png +++ b/konqueror/keditbookmarks/cr64-app-keditbookmarks.png diff --git a/konqueror/listview/konq_listview.cc b/konqueror/listview/konq_listview.cc index 8c9369a4c..67da49c6d 100644 --- a/konqueror/listview/konq_listview.cc +++ b/konqueror/listview/konq_listview.cc @@ -389,17 +389,22 @@ void KonqListView::slotSelect() for (KonqBaseListViewWidget::iterator it = m_pListView->begin(); it != m_pListView->end(); it++ ) { - if ((m_pListView->automaticSelection()) && (it->isSelected())) - { + if ((m_pListView->automaticSelection()) && (it->isSelected())) { it->setSelected(FALSE); //the following line is to prevent that more than one item were selected //and now get deselected and automaticSelection() was true, this shouldn't happen //but who knows, aleXXX m_pListView->deactivateAutomaticSelection(); - }; - if ( re.exactMatch( it->text(0) ) ) - it->setSelected( TRUE); - }; + } + if ( it->isVisible() ) { + if ( re.exactMatch( it->text(0) ) ) { + it->setSelected(TRUE); + } + } + else { + it->setSelected(FALSE); + } + } m_pListView->blockSignals( false ); m_pListView->deactivateAutomaticSelection(); emit m_pListView->selectionChanged(); @@ -418,9 +423,16 @@ void KonqListView::slotUnselect() m_pListView->blockSignals(TRUE); - for (KonqBaseListViewWidget::iterator it = m_pListView->begin(); it != m_pListView->end(); it++ ) - if ( re.exactMatch( it->text(0) ) ) + for (KonqBaseListViewWidget::iterator it = m_pListView->begin(); it != m_pListView->end(); it++ ) { + if ( it->isVisible() ) { + if ( re.exactMatch( it->text(0) ) ) { + it->setSelected(FALSE); + } + } + else { it->setSelected(FALSE); + } + } m_pListView->blockSignals(FALSE); m_pListView->deactivateAutomaticSelection(); diff --git a/konqueror/listview/konq_listviewwidget.cc b/konqueror/listview/konq_listviewwidget.cc index b7dd24c4b..4c1198325 100644 --- a/konqueror/listview/konq_listviewwidget.cc +++ b/konqueror/listview/konq_listviewwidget.cc @@ -987,7 +987,7 @@ void KonqBaseListViewWidget::selectedItems( TQPtrList<KonqBaseListViewItem> *_li { iterator it = begin(); for ( ; it != end(); it++ ) - if ( it->isSelected() ) + if ( it->isVisible() && it->isSelected() ) _list->append( &*it ); } @@ -1008,7 +1008,7 @@ KFileItemList KonqBaseListViewWidget::selectedFileItems() KFileItemList list; iterator it = begin(); for ( ; it != end(); it++ ) - if ( it->isSelected() ) + if ( it->isVisible() && it->isSelected() ) list.append( it->item() ); return list; } @@ -1019,7 +1019,7 @@ KURL::List KonqBaseListViewWidget::selectedUrls( bool mostLocal ) KURL::List list; iterator it = begin(); for ( ; it != end(); it++ ) - if ( it->isSelected() ) + if ( it->isVisible() && it->isSelected() ) list.append( mostLocal ? it->item()->mostLocalURL( dummy ) : it->item()->url() ); return list; } diff --git a/konqueror/pics/actions/cr16-action-trinity1.png b/konqueror/pics/actions/cr16-action-trinity1.png Binary files differindex 86a3d1237..55b79eedb 100644 --- a/konqueror/pics/actions/cr16-action-trinity1.png +++ b/konqueror/pics/actions/cr16-action-trinity1.png diff --git a/konqueror/pics/actions/cr16-action-trinity2.png b/konqueror/pics/actions/cr16-action-trinity2.png Binary files differindex 15bf0ae76..526ab9776 100644 --- a/konqueror/pics/actions/cr16-action-trinity2.png +++ b/konqueror/pics/actions/cr16-action-trinity2.png diff --git a/konqueror/pics/actions/cr16-action-trinity3.png b/konqueror/pics/actions/cr16-action-trinity3.png Binary files differindex 86a3d1237..55b79eedb 100644 --- a/konqueror/pics/actions/cr16-action-trinity3.png +++ b/konqueror/pics/actions/cr16-action-trinity3.png diff --git a/konqueror/pics/actions/cr16-action-trinity4.png b/konqueror/pics/actions/cr16-action-trinity4.png Binary files differindex 15bf0ae76..526ab9776 100644 --- a/konqueror/pics/actions/cr16-action-trinity4.png +++ b/konqueror/pics/actions/cr16-action-trinity4.png diff --git a/konqueror/pics/actions/cr16-action-trinity5.png b/konqueror/pics/actions/cr16-action-trinity5.png Binary files differindex 86a3d1237..55b79eedb 100644 --- a/konqueror/pics/actions/cr16-action-trinity5.png +++ b/konqueror/pics/actions/cr16-action-trinity5.png diff --git a/konqueror/pics/actions/cr16-action-trinity6.png b/konqueror/pics/actions/cr16-action-trinity6.png Binary files differindex 15bf0ae76..526ab9776 100644 --- a/konqueror/pics/actions/cr16-action-trinity6.png +++ b/konqueror/pics/actions/cr16-action-trinity6.png diff --git a/konqueror/pics/hi128-app-konqueror.png b/konqueror/pics/hi128-app-konqueror.png Binary files differindex c032a6e06..276f79cb8 100644 --- a/konqueror/pics/hi128-app-konqueror.png +++ b/konqueror/pics/hi128-app-konqueror.png diff --git a/konqueror/pics/hi16-app-kfm.png b/konqueror/pics/hi16-app-kfm.png Binary files differindex 4969259fc..1b46cc322 100644 --- a/konqueror/pics/hi16-app-kfm.png +++ b/konqueror/pics/hi16-app-kfm.png diff --git a/konqueror/pics/hi16-app-konqueror.png b/konqueror/pics/hi16-app-konqueror.png Binary files differindex 013f78bc4..9ba23b471 100644 --- a/konqueror/pics/hi16-app-konqueror.png +++ b/konqueror/pics/hi16-app-konqueror.png diff --git a/konqueror/pics/hi22-app-konqueror.png b/konqueror/pics/hi22-app-konqueror.png Binary files differindex 1413af913..eda89cf70 100644 --- a/konqueror/pics/hi22-app-konqueror.png +++ b/konqueror/pics/hi22-app-konqueror.png diff --git a/konqueror/pics/hi32-app-kfm.png b/konqueror/pics/hi32-app-kfm.png Binary files differindex 699c0ddd4..c15dbb83b 100644 --- a/konqueror/pics/hi32-app-kfm.png +++ b/konqueror/pics/hi32-app-kfm.png diff --git a/konqueror/pics/hi32-app-konqueror.png b/konqueror/pics/hi32-app-konqueror.png Binary files differindex ed21ceb5e..de0c8ecc7 100644 --- a/konqueror/pics/hi32-app-konqueror.png +++ b/konqueror/pics/hi32-app-konqueror.png diff --git a/konqueror/pics/hi48-app-kfm.png b/konqueror/pics/hi48-app-kfm.png Binary files differindex bb0b2a7f8..e345e15a1 100644 --- a/konqueror/pics/hi48-app-kfm.png +++ b/konqueror/pics/hi48-app-kfm.png diff --git a/konqueror/pics/hi48-app-konqueror.png b/konqueror/pics/hi48-app-konqueror.png Binary files differindex 11d84db32..91b48a468 100644 --- a/konqueror/pics/hi48-app-konqueror.png +++ b/konqueror/pics/hi48-app-konqueror.png diff --git a/konqueror/pics/hi64-app-kfm.png b/konqueror/pics/hi64-app-kfm.png Binary files differindex 4d2b58bcc..478510127 100644 --- a/konqueror/pics/hi64-app-kfm.png +++ b/konqueror/pics/hi64-app-kfm.png diff --git a/konqueror/pics/hi64-app-konqueror.png b/konqueror/pics/hi64-app-konqueror.png Binary files differindex 637751f61..9215cfe37 100644 --- a/konqueror/pics/hi64-app-konqueror.png +++ b/konqueror/pics/hi64-app-konqueror.png diff --git a/konqueror/pics/indicators/indicator_connect.png b/konqueror/pics/indicators/indicator_connect.png Binary files differindex feff45c6a..f089d424b 100644 --- a/konqueror/pics/indicators/indicator_connect.png +++ b/konqueror/pics/indicators/indicator_connect.png diff --git a/konqueror/pics/indicators/indicator_empty.png b/konqueror/pics/indicators/indicator_empty.png Binary files differindex dcb847550..449392dcc 100644 --- a/konqueror/pics/indicators/indicator_empty.png +++ b/konqueror/pics/indicators/indicator_empty.png diff --git a/konqueror/pics/indicators/indicator_noconnect.png b/konqueror/pics/indicators/indicator_noconnect.png Binary files differindex 5f14df0a0..fb8253fb1 100644 --- a/konqueror/pics/indicators/indicator_noconnect.png +++ b/konqueror/pics/indicators/indicator_noconnect.png diff --git a/konqueror/pics/indicators/indicator_viewactive.png b/konqueror/pics/indicators/indicator_viewactive.png Binary files differindex f8af065d8..ec5b78782 100644 --- a/konqueror/pics/indicators/indicator_viewactive.png +++ b/konqueror/pics/indicators/indicator_viewactive.png diff --git a/konqueror/pics/tiles/bluemorning.png b/konqueror/pics/tiles/bluemorning.png Binary files differindex 99a4945b2..9f0c52210 100644 --- a/konqueror/pics/tiles/bluemorning.png +++ b/konqueror/pics/tiles/bluemorning.png diff --git a/konqueror/pics/tiles/canvas.png b/konqueror/pics/tiles/canvas.png Binary files differindex 9dd8010a0..b4227ee71 100644 --- a/konqueror/pics/tiles/canvas.png +++ b/konqueror/pics/tiles/canvas.png diff --git a/konqueror/pics/tiles/kde4ever.png b/konqueror/pics/tiles/kde4ever.png Binary files differindex 0ff7b8e9a..7386433a9 100644 --- a/konqueror/pics/tiles/kde4ever.png +++ b/konqueror/pics/tiles/kde4ever.png diff --git a/konqueror/pics/tiles/kenwimer.png b/konqueror/pics/tiles/kenwimer.png Binary files differindex 7642a294e..760c810ca 100644 --- a/konqueror/pics/tiles/kenwimer.png +++ b/konqueror/pics/tiles/kenwimer.png diff --git a/konqueror/pics/tiles/noise.png b/konqueror/pics/tiles/noise.png Binary files differindex c39730093..ad17aef1f 100644 --- a/konqueror/pics/tiles/noise.png +++ b/konqueror/pics/tiles/noise.png diff --git a/konqueror/pics/tiles/paper_flieder.png b/konqueror/pics/tiles/paper_flieder.png Binary files differindex a1a014bab..85825a303 100644 --- a/konqueror/pics/tiles/paper_flieder.png +++ b/konqueror/pics/tiles/paper_flieder.png diff --git a/konqueror/pics/tiles/redfiber.png b/konqueror/pics/tiles/redfiber.png Binary files differindex 3618ca783..6e9f1a32a 100644 --- a/konqueror/pics/tiles/redfiber.png +++ b/konqueror/pics/tiles/redfiber.png diff --git a/konsole/konsole/TEWidget.cpp b/konsole/konsole/TEWidget.cpp index f151044fc..52cd1236b 100644 --- a/konsole/konsole/TEWidget.cpp +++ b/konsole/konsole/TEWidget.cpp @@ -340,6 +340,8 @@ TEWidget::TEWidget(TQWidget *parent, const char *name) ,font_h(1) ,font_w(1) ,font_a(1) +,screen_num(0) +,screen(NULL) ,lines(1) ,columns(1) ,contentHeight(1) @@ -1694,7 +1696,22 @@ void TEWidget::wheelEvent( TQWheelEvent* ev ) return; if ( mouse_marks ) - TQApplication::sendEvent(scrollbar, ev); + { + if (!screen || screen->hasScroll() || (scrollbar->maxValue() == 0 && screen_num == 0)) + { + // Send event to scroll bar + TQApplication::sendEvent(scrollbar, ev); + } + else + { + // Terminal window can not be scrolled, so emulate key up/key down when mouse wheel is used + TQKeyEvent ke(TQEvent::KeyPress, ev->delta() > 0 ? TQt::Key_Up : TQt::Key_Down, 0, TQt::NoButton); + for (int i = 0; i < TQApplication::wheelScrollLines(); ++i) + { + emit keyPressedSignal(&ke); + } + } + } else { TQPoint tL = contentsRect().topLeft(); diff --git a/konsole/konsole/TEWidget.h b/konsole/konsole/TEWidget.h index 2baa2531c..967896082 100644 --- a/konsole/konsole/TEWidget.h +++ b/konsole/konsole/TEWidget.h @@ -32,6 +32,7 @@ #include <tdepopupmenu.h> #include "TECommon.h" +#include "TEScreen.h" extern unsigned short vt100_graphics[32]; @@ -142,6 +143,8 @@ public: void setRim(int rim) { rimX=rim; rimY=rim; } + void setScreen(int num, TEScreen *scr) { screen_num = num & 0x01; screen = scr; } + public slots: void setSelectionEnd(); @@ -241,6 +244,10 @@ private: int bX; // offset int bY; // offset + // Required to handle mouse wheel events correctly in all cases + int screen_num; // Screen number (0 or 1) + TEScreen *screen; // Pointer to current screen. No ownership!! + int lines; int columns; int contentHeight; diff --git a/konsole/konsole/TEmulation.cpp b/konsole/konsole/TEmulation.cpp index 7576e9688..943d2f205 100644 --- a/konsole/konsole/TEmulation.cpp +++ b/konsole/konsole/TEmulation.cpp @@ -197,6 +197,7 @@ void TEmulation::setScreen(int n) { TEScreen *old = scr; scr = screen[n&1]; + gui->setScreen(n&1, scr); if (scr != old) old->setBusySelecting(false); } diff --git a/konsole/other/hi128-app-konsole.png b/konsole/other/hi128-app-konsole.png Binary files differindex a7f21faa5..4539203ff 100644 --- a/konsole/other/hi128-app-konsole.png +++ b/konsole/other/hi128-app-konsole.png diff --git a/konsole/other/hi16-app-konsole.png b/konsole/other/hi16-app-konsole.png Binary files differindex e4fabb297..249d8a553 100644 --- a/konsole/other/hi16-app-konsole.png +++ b/konsole/other/hi16-app-konsole.png diff --git a/konsole/other/hi22-app-konsole.png b/konsole/other/hi22-app-konsole.png Binary files differindex 9033d420f..197234c91 100644 --- a/konsole/other/hi22-app-konsole.png +++ b/konsole/other/hi22-app-konsole.png diff --git a/konsole/other/hi32-app-konsole.png b/konsole/other/hi32-app-konsole.png Binary files differindex 81b85b5c4..b1a2af965 100644 --- a/konsole/other/hi32-app-konsole.png +++ b/konsole/other/hi32-app-konsole.png diff --git a/konsole/other/hi48-app-konsole.png b/konsole/other/hi48-app-konsole.png Binary files differindex 97498f6d3..a2db33cd0 100644 --- a/konsole/other/hi48-app-konsole.png +++ b/konsole/other/hi48-app-konsole.png diff --git a/konsole/other/hi64-app-konsole.png b/konsole/other/hi64-app-konsole.png Binary files differindex 0b443d5ad..edb52329e 100644 --- a/konsole/other/hi64-app-konsole.png +++ b/konsole/other/hi64-app-konsole.png diff --git a/konsole/other/icons/cr16-action-activity.png b/konsole/other/icons/cr16-action-activity.png Binary files differindex 8d72794dd..502126dec 100644 --- a/konsole/other/icons/cr16-action-activity.png +++ b/konsole/other/icons/cr16-action-activity.png diff --git a/konsole/other/icons/cr16-action-konsoleblue.png b/konsole/other/icons/cr16-action-konsoleblue.png Binary files differindex eb53b8ece..7669299a7 100644 --- a/konsole/other/icons/cr16-action-konsoleblue.png +++ b/konsole/other/icons/cr16-action-konsoleblue.png diff --git a/konsole/other/icons/cr16-action-konsolered.png b/konsole/other/icons/cr16-action-konsolered.png Binary files differindex 7b8a66a00..d823890ea 100644 --- a/konsole/other/icons/cr16-action-konsolered.png +++ b/konsole/other/icons/cr16-action-konsolered.png diff --git a/konsole/other/icons/cr16-action-opentermblue.png b/konsole/other/icons/cr16-action-opentermblue.png Binary files differindex 36d9a28ff..dd5a5578e 100644 --- a/konsole/other/icons/cr16-action-opentermblue.png +++ b/konsole/other/icons/cr16-action-opentermblue.png diff --git a/konsole/other/icons/cr16-action-opentermred.png b/konsole/other/icons/cr16-action-opentermred.png Binary files differindex 49ff19fe3..13ea0a2c9 100644 --- a/konsole/other/icons/cr16-action-opentermred.png +++ b/konsole/other/icons/cr16-action-opentermred.png diff --git a/konsole/other/icons/cr16-action-silence.png b/konsole/other/icons/cr16-action-silence.png Binary files differindex a89226b3b..db8090abb 100644 --- a/konsole/other/icons/cr16-action-silence.png +++ b/konsole/other/icons/cr16-action-silence.png diff --git a/konsole/other/icons/cr22-action-konsoleblue.png b/konsole/other/icons/cr22-action-konsoleblue.png Binary files differindex 5c463804f..ede285965 100644 --- a/konsole/other/icons/cr22-action-konsoleblue.png +++ b/konsole/other/icons/cr22-action-konsoleblue.png diff --git a/konsole/other/icons/cr22-action-konsolered.png b/konsole/other/icons/cr22-action-konsolered.png Binary files differindex 2602d9842..873130fae 100644 --- a/konsole/other/icons/cr22-action-konsolered.png +++ b/konsole/other/icons/cr22-action-konsolered.png diff --git a/konsole/other/icons/cr22-action-opentermblue.png b/konsole/other/icons/cr22-action-opentermblue.png Binary files differindex 54051f6d5..813c9cfda 100644 --- a/konsole/other/icons/cr22-action-opentermblue.png +++ b/konsole/other/icons/cr22-action-opentermblue.png diff --git a/konsole/other/icons/cr22-action-opentermred.png b/konsole/other/icons/cr22-action-opentermred.png Binary files differindex a349d4376..e0edf6512 100644 --- a/konsole/other/icons/cr22-action-opentermred.png +++ b/konsole/other/icons/cr22-action-opentermred.png diff --git a/konsole/other/icons/cr32-action-konsoleblue.png b/konsole/other/icons/cr32-action-konsoleblue.png Binary files differindex 778cafb25..221aeb6da 100644 --- a/konsole/other/icons/cr32-action-konsoleblue.png +++ b/konsole/other/icons/cr32-action-konsoleblue.png diff --git a/konsole/other/icons/cr32-action-konsolered.png b/konsole/other/icons/cr32-action-konsolered.png Binary files differindex 6776c141d..3f4d5dd8a 100644 --- a/konsole/other/icons/cr32-action-konsolered.png +++ b/konsole/other/icons/cr32-action-konsolered.png diff --git a/konsole/other/icons/cr32-action-opentermblue.png b/konsole/other/icons/cr32-action-opentermblue.png Binary files differindex a394401dd..dedbe1a17 100644 --- a/konsole/other/icons/cr32-action-opentermblue.png +++ b/konsole/other/icons/cr32-action-opentermblue.png diff --git a/konsole/other/icons/cr32-action-opentermred.png b/konsole/other/icons/cr32-action-opentermred.png Binary files differindex e7e6134d2..892d93fa1 100644 --- a/konsole/other/icons/cr32-action-opentermred.png +++ b/konsole/other/icons/cr32-action-opentermred.png diff --git a/konsole/other/wallpapers/Metric-Monospace-14.png b/konsole/other/wallpapers/Metric-Monospace-14.png Binary files differindex 2cdb9eedf..73e52d634 100644 --- a/konsole/other/wallpapers/Metric-Monospace-14.png +++ b/konsole/other/wallpapers/Metric-Monospace-14.png diff --git a/kpager/hi16-app-kpager.png b/kpager/hi16-app-kpager.png Binary files differindex b58c33643..442447e64 100644 --- a/kpager/hi16-app-kpager.png +++ b/kpager/hi16-app-kpager.png diff --git a/kpager/hi22-app-kpager.png b/kpager/hi22-app-kpager.png Binary files differindex f549d927b..196675093 100644 --- a/kpager/hi22-app-kpager.png +++ b/kpager/hi22-app-kpager.png diff --git a/kpager/hi32-app-kpager.png b/kpager/hi32-app-kpager.png Binary files differindex 00e5c0c26..85a194dfe 100644 --- a/kpager/hi32-app-kpager.png +++ b/kpager/hi32-app-kpager.png diff --git a/kpager/hi48-app-kpager.png b/kpager/hi48-app-kpager.png Binary files differindex 529954009..c04a8bc34 100644 --- a/kpager/hi48-app-kpager.png +++ b/kpager/hi48-app-kpager.png diff --git a/kpersonalizer/cr16-app-kpersonalizer.png b/kpersonalizer/cr16-app-kpersonalizer.png Binary files differindex 86186d795..04c1dd14d 100644 --- a/kpersonalizer/cr16-app-kpersonalizer.png +++ b/kpersonalizer/cr16-app-kpersonalizer.png diff --git a/kpersonalizer/cr32-app-kpersonalizer.png b/kpersonalizer/cr32-app-kpersonalizer.png Binary files differindex cc3e98698..9e10e5223 100644 --- a/kpersonalizer/cr32-app-kpersonalizer.png +++ b/kpersonalizer/cr32-app-kpersonalizer.png diff --git a/kpersonalizer/pics/step1.png b/kpersonalizer/pics/step1.png Binary files differindex a71b74bfd..63a2eec66 100644 --- a/kpersonalizer/pics/step1.png +++ b/kpersonalizer/pics/step1.png diff --git a/kpersonalizer/pics/step2.png b/kpersonalizer/pics/step2.png Binary files differindex 647808f0c..a0320cd67 100644 --- a/kpersonalizer/pics/step2.png +++ b/kpersonalizer/pics/step2.png diff --git a/kpersonalizer/pics/step3.png b/kpersonalizer/pics/step3.png Binary files differindex 9d22cc8fa..ac9031dec 100644 --- a/kpersonalizer/pics/step3.png +++ b/kpersonalizer/pics/step3.png diff --git a/kpersonalizer/pics/step4.png b/kpersonalizer/pics/step4.png Binary files differindex dfeee7872..364dffc70 100644 --- a/kpersonalizer/pics/step4.png +++ b/kpersonalizer/pics/step4.png diff --git a/kpersonalizer/pics/step5.png b/kpersonalizer/pics/step5.png Binary files differindex 908c6a255..e6b6e790a 100644 --- a/kpersonalizer/pics/step5.png +++ b/kpersonalizer/pics/step5.png diff --git a/ksmserver/server.cpp b/ksmserver/server.cpp index f09dcd9df..505865c54 100644 --- a/ksmserver/server.cpp +++ b/ksmserver/server.cpp @@ -592,6 +592,7 @@ KSMServer::KSMServer( const TQString& windowManager, const TQString& windowManag state = Idle; dialogActive = false; saveSession = false; + m_startupCompleted = false; wmPhase1WaitingCount = 0; TDEConfig* config = TDEGlobal::config(); config->setGroup("General" ); @@ -990,3 +991,8 @@ bool KSMServer::defaultSession() const { return sessionGroup.isEmpty(); } + +bool KSMServer::startupCompleted() +{ + return m_startupCompleted; +} diff --git a/ksmserver/server.h b/ksmserver/server.h index bc677752c..a90ef43ac 100644 --- a/ksmserver/server.h +++ b/ksmserver/server.h @@ -61,6 +61,7 @@ k_dcop: void autoStart2Done(); void kcmPhase1Done(); void kcmPhase2Done(); + bool startupCompleted(); public: KSMServer( const TQString& windowManager, const TQString& windowManagerAddArgs, bool only_local ); ~KSMServer(); @@ -181,7 +182,7 @@ private: TQString windowWmClientMachine(WId w); WId windowWmClientLeader(WId w); TQCString windowSessionId(WId w, WId leader); - + bool checkStartupSuspend(); void finishStartup(); void resumeStartupInternal(); @@ -235,6 +236,7 @@ private: TQTimer startupSuspendTimeoutTimer; bool waitAutoStart2; bool waitKcmInit2; + bool m_startupCompleted; TQTimer pendingShutdown; TDEApplication::ShutdownConfirm pendingShutdown_confirm; TDEApplication::ShutdownType pendingShutdown_sdtype; diff --git a/ksmserver/shutdown.cpp b/ksmserver/shutdown.cpp index a40bffc3b..753703289 100644 --- a/ksmserver/shutdown.cpp +++ b/ksmserver/shutdown.cpp @@ -229,7 +229,7 @@ void KSMServer::shutdownInternal( TDEApplication::ShutdownConfirm confirm, // TODO: turn the feedback widget into a list of apps to be closed, // with an indicator of the current status for each. KSMShutdownFeedback::stop(); // make the screen become normal again - if (selection != 0) { + if (selection != SuspendType::NotSpecified) { // respect lock on resume & disable suspend/hibernate settings // from power-manager TDEConfig config("power-managerrc"); @@ -244,14 +244,19 @@ void KSMServer::shutdownInternal( TDEApplication::ShutdownConfirm confirm, #ifdef __TDE_HAVE_TDEHWLIB TDERootSystemDevice* rootDevice = hwDevices->rootSystemDevice(); if (rootDevice) { - if (selection == 1) { // Suspend - rootDevice->setPowerState(TDESystemPowerState::Suspend); - } - if (selection == 2) { // Hibernate - rootDevice->setPowerState(TDESystemPowerState::Hibernate); - } - if (selection == 3) { // Freeze - rootDevice->setPowerState(TDESystemPowerState::Freeze); + switch (selection) { + case SuspendType::Freeze: + rootDevice->setPowerState(TDESystemPowerState::Freeze); + break; + case SuspendType::Suspend: + rootDevice->setPowerState(TDESystemPowerState::Suspend); + break; + case SuspendType::Hibernate: + rootDevice->setPowerState(TDESystemPowerState::Hibernate); + break; + case SuspendType::HybridSuspend: + rootDevice->setPowerState(TDESystemPowerState::HybridSuspend); + break; } } #endif diff --git a/ksmserver/shutdown.png b/ksmserver/shutdown.png Binary files differindex 956f6cc3d..7bedf5de6 100644 --- a/ksmserver/shutdown.png +++ b/ksmserver/shutdown.png diff --git a/ksmserver/shutdowndlg.cpp b/ksmserver/shutdowndlg.cpp index 6573f8bd2..66ba78ea0 100644 --- a/ksmserver/shutdowndlg.cpp +++ b/ksmserver/shutdowndlg.cpp @@ -379,7 +379,7 @@ void KSMShutdownFeedback::slotPaintEffect() float doFancyLogoutFadeBackTime = 0; if ( m_greyImageCreated == false ) { m_greyImageCreated = true; - + // eliminate nasty flicker on first show m_root.resize( width(), height() ); TQImage blendedImage = m_grayImage; @@ -388,31 +388,31 @@ void KSMShutdownFeedback::slotPaintEffect() blendedImage.setAlphaBuffer(false); p.drawImage( 0, 0, blendedImage ); p.end(); - + setBackgroundPixmap( m_root ); setGeometry( TQApplication::desktop()->geometry() ); setBackgroundMode( TQWidget::NoBackground ); - + m_unfadedImage = m_grayImage.copy(); - + register uchar * r = m_grayImage.bits(); uchar * end = m_grayImage.bits() + m_grayImage.numBytes(); - + while ( r != end ) { *reinterpret_cast<TQRgb*>(r) = tqRgba(0, 0, 0, 107); r += 4; } - + // start timer which is used for cpu-speed-independent fading m_fadeTime.start(); m_rowsDone = 0; } - + // return if fading is completely done... if ( ( m_grayOpacity >= 1.0f && m_fadeBackwards == FALSE ) || ( m_grayOpacity <= 0.0f && m_fadeBackwards == TRUE ) ) { return; } - + if ( m_fadeBackwards == FALSE ) { m_grayOpacity = m_fadeTime.elapsed() / doFancyLogoutFadeTime; if ( m_grayOpacity > 1.0f ) @@ -423,23 +423,23 @@ void KSMShutdownFeedback::slotPaintEffect() if ( m_grayOpacity < 0.0f ) m_grayOpacity = 0.0f; } - + const int imgWidth = m_unfadedImage.width(); int imgHeight = m_unfadedImage.height(); int heightUnit = imgHeight / 3; if( heightUnit < 1 ) heightUnit = 1; - + int y1 = static_cast<int>( imgHeight*m_grayOpacity - heightUnit + m_grayOpacity*heightUnit*2.0f ); if( y1 > imgHeight ) { y1 = imgHeight; } - + int y2 = y1+heightUnit; if( y2 > imgHeight ) { y2 = imgHeight; } - + if( m_fadeBackwards == FALSE ) { if( y1 > 0 && y1 < imgHeight && y1-m_rowsDone > 0 && m_rowsDone < imgHeight ) @@ -460,7 +460,7 @@ void KSMShutdownFeedback::slotPaintEffect() m_rowsDone = y2; } } - + int start_y1 = y1; if( start_y1 < 0 ) { start_y1 = 0; @@ -481,7 +481,7 @@ void KSMShutdownFeedback::slotPaintEffect() } bitBlt( this, 0, start_y1, &img ); } - + TQTimer::singleShot( 1, this, TQT_SLOT( slotPaintEffect() ) ); } else { @@ -492,18 +492,18 @@ void KSMShutdownFeedback::slotPaintEffect() } return; } - + if ( m_currentY == 0 ) { setBackgroundMode( TQWidget::NoBackground ); setGeometry( TQApplication::desktop()->geometry() ); m_root.resize( width(), height() ); // for the default logout - + KPixmap pixmap; pixmap = TQPixmap(TQPixmap::grabWindow( tqt_xrootwin(), 0, 0, width(), height() )); bitBlt( this, 0, 0, &pixmap ); bitBlt( &m_root, 0, 0, &pixmap ); } - + KPixmap pixmap; pixmap = TQPixmap(TQPixmap::grabWindow( tqt_xrootwin(), 0, m_currentY, width(), 10 )); TQImage image = pixmap.convertToImage(); @@ -707,7 +707,7 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, TQVBoxLayout* vbox = new TQVBoxLayout( this ); if (m_selection) { - *m_selection = 0; + *m_selection = SuspendType::NotSpecified; } TQFrame* frame = new TQFrame( this ); @@ -758,15 +758,14 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, FlatButton* btnLogout = new FlatButton( frame ); btnLogout->setTextLabel( TQString("&") + i18n("Log out"), false ); btnLogout->setPixmap( DesktopIcon( "back") ); + TQToolTip::add( btnLogout, i18n( "<qt><p>Log out of the current session to login as a different user.</p></qt>" ) ); int i = btnLogout->textLabel().find( TQRegExp("\\&"), 0 ); // i == 1 btnLogout->setAccel( "ALT+" + btnLogout->textLabel().lower()[i+1] ) ; hbuttonbox->addWidget ( btnLogout ); connect(btnLogout, TQT_SIGNAL(clicked()), TQT_SLOT(slotLogout())); - } else { - // konqy lfrm = new TQFrame( frame ); lfrm->setFrameStyle( TQFrame::Panel | TQFrame::Sunken ); @@ -787,8 +786,8 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, buttonlay->addStretch( 1 ); // End session - KPushButton* btnLogout = new KPushButton( KGuiItem( i18n("&End Current Session"), "edit-undo"), frame ); - TQToolTip::add( btnLogout, i18n( "<qt><h3>End Current Session</h3><p>Log out of the current session to login with a different user</p></qt>" ) ); + KPushButton* btnLogout = new KPushButton( KGuiItem( i18n("&Log out"), "edit-undo"), frame ); + TQToolTip::add( btnLogout, i18n( "<qt><p>Log out of the current session to login as a different user.</p></qt>" ) ); btnFont = btnLogout->font(); buttonlay->addWidget( btnLogout ); connect(btnLogout, TQT_SIGNAL(clicked()), TQT_SLOT(slotLogout())); @@ -810,6 +809,7 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, bool canFreeze = false; bool canSuspend = false; bool canHibernate = false; + bool canHybridSuspend = false; #if defined(COMPILE_HALBACKEND) // Query HAL for suspend/resume support @@ -865,6 +865,14 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, { canHibernate = true; } + + if (libhal_device_get_property_bool(m_halCtx, + "/org/freedesktop/Hal/devices/computer", + "power_management.can_suspend_hybrid", + NULL)) + { + canHybridSuspend = true; + } } #elif defined(__TDE_HAVE_TDEHWLIB) // COMPILE_HALBACKEND TDERootSystemDevice* rootDevice = TDEGlobal::hardwareDevices()->rootSystemDevice(); @@ -872,25 +880,30 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, canFreeze = rootDevice->canFreeze(); canSuspend = rootDevice->canSuspend(); canHibernate = rootDevice->canHibernate(); + canHybridSuspend = rootDevice->canHybridSuspend(); } else { canFreeze = false; canSuspend = false; canHibernate = false; + canHybridSuspend = false; } #endif // COMPILE_HALBACKEND if(doUbuntuLogout) { - + // Ubuntu style logout window if (canFreeze && !disableSuspend) { // Freeze FlatButton* btnFreeze = new FlatButton( frame ); btnFreeze->setTextLabel( i18n("&Freeze"), false ); btnFreeze->setPixmap( DesktopIcon( "suspend") ); + TQToolTip::add(btnFreeze, i18n("<qt><p>Put the computer in software idle mode," + " allowing for some powersaving. The system can be reactivated in a really short time," + " almost instantly.</p><p>This correspond to ACPI S0 mode.</p></qt>")); int i = btnFreeze->textLabel().find( TQRegExp("\\&"), 0 ); // i == 1 btnFreeze->setAccel( "ALT+" + btnFreeze->textLabel().lower()[i+1] ) ; - hbuttonbox->addWidget ( btnFreeze); + hbuttonbox->addWidget ( btnFreeze ); connect(btnFreeze, TQT_SIGNAL(clicked()), TQT_SLOT(slotFreeze())); } @@ -898,11 +911,15 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, { // Suspend FlatButton* btnSuspend = new FlatButton( frame ); - btnSuspend->setTextLabel( i18n("&Suspend"), false ); + btnSuspend->setTextLabel( i18n("&Sleep"), false ); btnSuspend->setPixmap( DesktopIcon( "suspend") ); + TQToolTip::add(btnSuspend, i18n("<qt><p>Put the computer in suspend-to-memory mode." + " The system is stopped and its state saved to memory.</p><p> This allows more powersaving than 'Freeze'" + " but requires longer time to reactivate the system.</p><p>This correspond to ACPI S3 mode.</p>" + "<p>Also known as Suspend-to-RAM mode.</p></qt>")); int i = btnSuspend->textLabel().find( TQRegExp("\\&"), 0 ); // i == 1 btnSuspend->setAccel( "ALT+" + btnSuspend->textLabel().lower()[i+1] ) ; - hbuttonbox->addWidget ( btnSuspend); + hbuttonbox->addWidget ( btnSuspend ); connect(btnSuspend, TQT_SIGNAL(clicked()), TQT_SLOT(slotSuspend())); } @@ -912,12 +929,33 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, FlatButton* btnHibernate = new FlatButton( frame ); btnHibernate->setTextLabel( i18n("&Hibernate"), false ); btnHibernate->setPixmap( DesktopIcon( "hibernate") ); + TQToolTip::add(btnHibernate, i18n("<qt><p>Put the computer in suspend-to-disk mode." + " The system is stopped and its state saved to disk.</p><p>This offers the greatest powersaving but" + " considerable time is required to reactivate the system again.</p><p>This correspond to ACPI S4 mode.</p><p>Also known as Suspend-to-Disk mode.</p></qt>")); int i = btnHibernate->textLabel().find( TQRegExp("\\&"), 0 ); // i == 1 btnHibernate->setAccel( "ALT+" + btnHibernate->textLabel().lower()[i+1] ) ; - hbuttonbox->addWidget ( btnHibernate); + hbuttonbox->addWidget ( btnHibernate ); connect(btnHibernate, TQT_SIGNAL(clicked()), TQT_SLOT(slotHibernate())); } + if (canHybridSuspend && !disableSuspend && !disableHibernate) + { + // Hybrid suspend + FlatButton* btnHybridSuspend = new FlatButton( frame ); + btnHybridSuspend->setTextLabel( i18n("H&ybrid Suspend"), false ); + btnHybridSuspend->setPixmap( DesktopIcon( "hibernate") ); + TQToolTip::add(btnHybridSuspend, i18n("<qt><p>Put the computer in both suspend-to-memory and" + " suspend-to-disk mode. The system is stopped and its state saved to memory and to disk.</p>" + "<p>This offers the best of both 'Sleep' and 'Hibernate' modes combined together. The system is" + " de facto in 'Sleep' mode but if power is lost, work can still be resumed as if the system" + " had been hibernated, preventing any data loss.</p><p>This correspond to ACPI S3+S4 mode.</p>" + "<p>Also known as Suspend-to-RAM + Suspend-to-Disk mode.</p></qt>")); + int i = btnHybridSuspend->textLabel().find( TQRegExp("\\&"), 0 ); // i == 1 + btnHybridSuspend->setAccel( "ALT+" + btnHybridSuspend->textLabel().lower()[i+1] ) ; + hbuttonbox->addWidget ( btnHybridSuspend ); + connect(btnHybridSuspend, TQT_SIGNAL(clicked()), TQT_SLOT(slotHybridSuspend())); + } + // Separator (within buttonlay) vbox->addWidget( new KSeparator( frame ) ); @@ -930,6 +968,7 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, FlatButton* btnReboot = new FlatButton( frame ); btnReboot->setTextLabel( i18n("&Restart"), false ); btnReboot->setPixmap( DesktopIcon( "reload") ); + TQToolTip::add( btnReboot, i18n( "<qt><p>Log out of the current session and restart the computer.</p></qt>" ) ); int i = btnReboot->textLabel().find( TQRegExp("\\&"), 0 ); // i == 1 btnReboot->setAccel( "ALT+" + btnReboot->textLabel().lower()[i+1] ) ; hbuttonbox2->addWidget ( btnReboot); @@ -968,8 +1007,9 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, if (maysd) { // Shutdown FlatButton* btnHalt = new FlatButton( frame ); - btnHalt->setTextLabel( i18n("&Turn Off"), false ); + btnHalt->setTextLabel( i18n("&Shutdown"), false ); btnHalt->setPixmap( DesktopIcon( "system-log-out") ); + TQToolTip::add( btnHalt, i18n( "<qt><p>Log out of the current session and turn off the computer.</p></qt>" ) ); int i = btnHalt->textLabel().find( TQRegExp("\\&"), 0 ); // i == 1 btnHalt->setAccel( "ALT+" + btnHalt->textLabel().lower()[i+1] ) ; hbuttonbox2->addWidget ( btnHalt ); @@ -991,10 +1031,11 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, } else { + // Standard style logout window if (maysd) { // Shutdown - KPushButton* btnHalt = new KPushButton( KGuiItem( i18n("&Turn Off Computer"), "system-log-out"), frame ); - TQToolTip::add( btnHalt, i18n( "<qt><h3>Turn Off Computer</h3><p>Log out of the current session and turn off the computer</p></qt>" ) ); + KPushButton* btnHalt = new KPushButton( KGuiItem( i18n("&Shutdown"), "system-log-out"), frame ); + TQToolTip::add( btnHalt, i18n( "<qt><p>Log out of the current session and turn off the computer.</p></qt>" ) ); btnHalt->setFont( btnFont ); buttonlay->addWidget( btnHalt ); connect(btnHalt, TQT_SIGNAL(clicked()), TQT_SLOT(slotHalt())); @@ -1005,8 +1046,8 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, if (mayrb) { // Reboot - KSMDelayedPushButton* btnReboot = new KSMDelayedPushButton( KGuiItem( i18n("&Restart Computer"), "reload"), frame ); - TQToolTip::add( btnReboot, i18n( "<qt><h3>Restart Computer</h3><p>Log out of the current session and restart the computer</p><p>Hold the mouse button or the space bar for a short while to get a list of options what to boot</p></qt>" ) ); + KSMDelayedPushButton* btnReboot = new KSMDelayedPushButton( KGuiItem( i18n("&Restart"), "reload"), frame ); + TQToolTip::add( btnReboot, i18n( "<qt><p>Log out of the current session and restart the computer.</p></qt>" ) ); btnReboot->setFont( btnFont ); buttonlay->addWidget( btnReboot ); @@ -1042,7 +1083,10 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, if (canFreeze && !disableSuspend) { - KPushButton* btnFreeze = new KPushButton( KGuiItem( i18n("&Freeze Computer"), "suspend"), frame ); + KPushButton* btnFreeze = new KPushButton( KGuiItem( i18n("&Freeze"), "suspend"), frame ); + TQToolTip::add(btnFreeze, i18n("<qt><p>Put the computer in software idle mode," + " allowing for some powersaving. The system can be reactivated in a really short time," + " almost instantly.</p><p>This correspond to ACPI S0 mode.</p></qt>")); btnFreeze->setFont( btnFont ); buttonlay->addWidget( btnFreeze ); connect(btnFreeze, TQT_SIGNAL(clicked()), TQT_SLOT(slotFreeze())); @@ -1050,7 +1094,11 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, if (canSuspend && !disableSuspend) { - KPushButton* btnSuspend = new KPushButton( KGuiItem( i18n("&Suspend Computer"), "suspend"), frame ); + KPushButton* btnSuspend = new KPushButton( KGuiItem( i18n("&Sleep"), "suspend"), frame ); + TQToolTip::add(btnSuspend, i18n("<qt><p>Put the computer in suspend-to-memory mode." + " The system is stopped and its state saved to memory.</p><p> This allows more powersaving than 'Freeze'" + " but requires longer time to reactivate the system.</p><p>This correspond to ACPI S3 mode.</p>" + "<p>Also known as Suspend-to-RAM mode.</p></qt>")); btnSuspend->setFont( btnFont ); buttonlay->addWidget( btnSuspend ); connect(btnSuspend, TQT_SIGNAL(clicked()), TQT_SLOT(slotSuspend())); @@ -1058,12 +1106,29 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, if (canHibernate && !disableHibernate) { - KPushButton* btnHibernate = new KPushButton( KGuiItem( i18n("&Hibernate Computer"), "hibernate"), frame ); + KPushButton* btnHibernate = new KPushButton( KGuiItem( i18n("&Hibernate"), "hibernate"), frame ); + TQToolTip::add(btnHibernate, i18n("<qt><p>Put the computer in suspend-to-disk mode." + " The system is stopped and its state saved to disk.</p><p>This offers the greatest powersaving but" + " considerable time is required to reactivate the system again.</p><p>This correspond to ACPI S4 mode.</p><p>Also known as Suspend-to-Disk mode.</p></qt>")); btnHibernate->setFont( btnFont ); buttonlay->addWidget( btnHibernate ); connect(btnHibernate, TQT_SIGNAL(clicked()), TQT_SLOT(slotHibernate())); } + if (canHybridSuspend && !disableSuspend && !disableHibernate) + { + KPushButton* btnHybridSuspend = new KPushButton( KGuiItem( i18n("H&ybrid Suspend"), "hibernate"), frame ); + TQToolTip::add(btnHybridSuspend, i18n("<qt><p>Put the computer in both suspend-to-memory and" + " suspend-to-disk mode. The system is stopped and its state saved to memory and to disk.</p>" + "<p>This offers the best of both 'Sleep' and 'Hibernate' modes combined together. The system is" + " de facto in 'Sleep' mode but if power is lost, work can still be resumed as if the system" + " had been hibernated, preventing any data loss.</p><p>This correspond to ACPI S3+S4 mode.</p>" + "<p>Also known as Suspend-to-RAM + Suspend-to-Disk mode.</p></qt>")); + btnHybridSuspend->setFont( btnFont ); + buttonlay->addWidget( btnHybridSuspend ); + connect(btnHybridSuspend, TQT_SIGNAL(clicked()), TQT_SLOT(slotHybridSuspend())); + } + buttonlay->addStretch( 1 ); // Separator @@ -1073,9 +1138,7 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, KPushButton* btnBack = new KPushButton( KStdGuiItem::cancel(), frame ); buttonlay->addWidget( btnBack ); connect(btnBack, TQT_SIGNAL(clicked()), TQT_SLOT(reject())); - } - } else { // finish the dialog correctly @@ -1102,11 +1165,7 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, connect(btnBack, TQT_SIGNAL(clicked()), TQT_SLOT(reject())); } - - } - - } @@ -1158,7 +1217,7 @@ void KSMShutdownDlg::slotHalt() void KSMShutdownDlg::slotSuspend() { #ifndef COMPILE_HALBACKEND - *m_selection = 1; // Suspend + *m_selection = SuspendType::Suspend; #else if (m_dbusConn) { @@ -1182,7 +1241,7 @@ void KSMShutdownDlg::slotSuspend() void KSMShutdownDlg::slotHibernate() { #ifndef COMPILE_HALBACKEND - *m_selection = 2; // Hibernate + *m_selection = SuspendType::Hibernate; #else if (m_dbusConn) { @@ -1202,8 +1261,29 @@ void KSMShutdownDlg::slotHibernate() void KSMShutdownDlg::slotFreeze() { - *m_selection = 3; // Freeze - reject(); + *m_selection = SuspendType::Freeze; + reject(); // continue on resume +} + +void KSMShutdownDlg::slotHybridSuspend() +{ +#ifndef COMPILE_HALBACKEND + *m_selection = SuspendType::HybridSuspend; +#else + if (m_dbusConn) + { + DBusMessage *msg = dbus_message_new_method_call( + "org.freedesktop.Hal", + "/org/freedesktop/Hal/devices/computer", + "org.freedesktop.Hal.Device.SystemPowerManagement", + "SuspendHybrid"); + + dbus_connection_send(m_dbusConn, msg, NULL); + + dbus_message_unref(msg); + } +#endif + reject(); // continue on resume } bool KSMShutdownDlg::confirmShutdown( bool maysd, bool mayrb, TDEApplication::ShutdownType& sdtype, TQString& bootOption, int* selection ) diff --git a/ksmserver/shutdowndlg.h b/ksmserver/shutdowndlg.h index a3864e616..25ee60f77 100644 --- a/ksmserver/shutdowndlg.h +++ b/ksmserver/shutdowndlg.h @@ -44,6 +44,17 @@ class TDEAction; #include <hal/libhal.h> #endif // COMPILE_HALBACKEND +namespace SuspendType { +enum SuspendType { + NotSpecified = 0, + Freeze, + Standby, + Suspend, + Hibernate, + HybridSuspend +}; +}; + // The (singleton) widget that makes/fades the desktop gray. class KSMShutdownFeedback : public TQWidget { @@ -76,7 +87,6 @@ private: int m_rowsDone; KPixmapIO m_pmio; bool m_greyImageCreated; - }; // The (singleton) widget that shows either pretty pictures or a black screen during logout @@ -138,6 +148,7 @@ public slots: void slotSuspend(); void slotHibernate(); void slotFreeze(); + void slotHybridSuspend(); protected: ~KSMShutdownDlg(); diff --git a/ksmserver/shutdownkonq.png b/ksmserver/shutdownkonq.png Binary files differindex 8442adc42..aab647bee 100644 --- a/ksmserver/shutdownkonq.png +++ b/ksmserver/shutdownkonq.png diff --git a/ksmserver/startup.cpp b/ksmserver/startup.cpp index b1ed9992e..fb9e696ec 100644 --- a/ksmserver/startup.cpp +++ b/ksmserver/startup.cpp @@ -389,6 +389,7 @@ void KSMServer::finishStartup() startupNotifierIPDlg=0; } + m_startupCompleted = true; setupXIOErrorHandler(); // From now on handle X errors as normal shutdown. } diff --git a/ksplashml/kcmksplash/pics/hi128-app-ksplash.png b/ksplashml/kcmksplash/pics/hi128-app-ksplash.png Binary files differindex fe0be47ae..cc6604312 100644 --- a/ksplashml/kcmksplash/pics/hi128-app-ksplash.png +++ b/ksplashml/kcmksplash/pics/hi128-app-ksplash.png diff --git a/ksplashml/kcmksplash/pics/hi16-app-ksplash.png b/ksplashml/kcmksplash/pics/hi16-app-ksplash.png Binary files differindex cf1cbf3d1..1537b674f 100644 --- a/ksplashml/kcmksplash/pics/hi16-app-ksplash.png +++ b/ksplashml/kcmksplash/pics/hi16-app-ksplash.png diff --git a/ksplashml/kcmksplash/pics/hi22-app-ksplash.png b/ksplashml/kcmksplash/pics/hi22-app-ksplash.png Binary files differindex 66e74b5a0..511d6a810 100644 --- a/ksplashml/kcmksplash/pics/hi22-app-ksplash.png +++ b/ksplashml/kcmksplash/pics/hi22-app-ksplash.png diff --git a/ksplashml/kcmksplash/pics/hi32-app-ksplash.png b/ksplashml/kcmksplash/pics/hi32-app-ksplash.png Binary files differindex 353385a08..80991f4a5 100644 --- a/ksplashml/kcmksplash/pics/hi32-app-ksplash.png +++ b/ksplashml/kcmksplash/pics/hi32-app-ksplash.png diff --git a/ksplashml/kcmksplash/pics/hi48-app-ksplash.png b/ksplashml/kcmksplash/pics/hi48-app-ksplash.png Binary files differindex 441a75713..fcb7fa4b4 100644 --- a/ksplashml/kcmksplash/pics/hi48-app-ksplash.png +++ b/ksplashml/kcmksplash/pics/hi48-app-ksplash.png diff --git a/ksplashml/kcmksplash/pics/hi64-app-ksplash.png b/ksplashml/kcmksplash/pics/hi64-app-ksplash.png Binary files differindex 444b6b927..25d934b41 100644 --- a/ksplashml/kcmksplash/pics/hi64-app-ksplash.png +++ b/ksplashml/kcmksplash/pics/hi64-app-ksplash.png diff --git a/ksplashml/pics/splash.png b/ksplashml/pics/splash.png Binary files differindex 1e56bcb9b..399c2915a 100644 --- a/ksplashml/pics/splash.png +++ b/ksplashml/pics/splash.png diff --git a/ksplashml/pics/themes/TDE-Classic/Preview.png b/ksplashml/pics/themes/TDE-Classic/Preview.png Binary files differindex 21a6b914f..4df2c8ccd 100644 --- a/ksplashml/pics/themes/TDE-Classic/Preview.png +++ b/ksplashml/pics/themes/TDE-Classic/Preview.png diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/Preview.png b/ksplashml/pics/themes/TDE-Classic/locolor/Preview.png Binary files differindex 21a6b914f..4df2c8ccd 100644 --- a/ksplashml/pics/themes/TDE-Classic/locolor/Preview.png +++ b/ksplashml/pics/themes/TDE-Classic/locolor/Preview.png diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/splash_active_bar.png b/ksplashml/pics/themes/TDE-Classic/locolor/splash_active_bar.png Binary files differindex ed4c25f1e..747f2c510 100644 --- a/ksplashml/pics/themes/TDE-Classic/locolor/splash_active_bar.png +++ b/ksplashml/pics/themes/TDE-Classic/locolor/splash_active_bar.png diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.png b/ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.png Binary files differindex 26c99f3af..cf4c012ab 100644 --- a/ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.png +++ b/ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.png diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/splash_inactive_bar.png b/ksplashml/pics/themes/TDE-Classic/locolor/splash_inactive_bar.png Binary files differindex c521c8c68..8957dc895 100644 --- a/ksplashml/pics/themes/TDE-Classic/locolor/splash_inactive_bar.png +++ b/ksplashml/pics/themes/TDE-Classic/locolor/splash_inactive_bar.png diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/splash_top.png b/ksplashml/pics/themes/TDE-Classic/locolor/splash_top.png Binary files differindex 52d5d32b7..f6cb70dfb 100644 --- a/ksplashml/pics/themes/TDE-Classic/locolor/splash_top.png +++ b/ksplashml/pics/themes/TDE-Classic/locolor/splash_top.png diff --git a/ksplashml/pics/themes/TDE-Classic/splash_active_bar.png b/ksplashml/pics/themes/TDE-Classic/splash_active_bar.png Binary files differindex ed4c25f1e..747f2c510 100644 --- a/ksplashml/pics/themes/TDE-Classic/splash_active_bar.png +++ b/ksplashml/pics/themes/TDE-Classic/splash_active_bar.png diff --git a/ksplashml/pics/themes/TDE-Classic/splash_bottom.png b/ksplashml/pics/themes/TDE-Classic/splash_bottom.png Binary files differindex ef5e14a58..8f17308a6 100644 --- a/ksplashml/pics/themes/TDE-Classic/splash_bottom.png +++ b/ksplashml/pics/themes/TDE-Classic/splash_bottom.png diff --git a/ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.png b/ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.png Binary files differindex c521c8c68..8957dc895 100644 --- a/ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.png +++ b/ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.png diff --git a/ksplashml/pics/themes/TDE-Classic/splash_top.png b/ksplashml/pics/themes/TDE-Classic/splash_top.png Binary files differindex e0336c5aa..63e047d1d 100644 --- a/ksplashml/pics/themes/TDE-Classic/splash_top.png +++ b/ksplashml/pics/themes/TDE-Classic/splash_top.png diff --git a/ksplashml/pics/themes/blue-bend/Preview.png b/ksplashml/pics/themes/blue-bend/Preview.png Binary files differindex 3aee9284d..0145181bd 100644 --- a/ksplashml/pics/themes/blue-bend/Preview.png +++ b/ksplashml/pics/themes/blue-bend/Preview.png diff --git a/ksplashml/pics/themes/blue-bend/splash_active_bar.png b/ksplashml/pics/themes/blue-bend/splash_active_bar.png Binary files differindex 76ebcc43b..0d39d1b66 100644 --- a/ksplashml/pics/themes/blue-bend/splash_active_bar.png +++ b/ksplashml/pics/themes/blue-bend/splash_active_bar.png diff --git a/ksplashml/pics/themes/blue-bend/splash_bottom.png b/ksplashml/pics/themes/blue-bend/splash_bottom.png Binary files differindex 070097af1..4cb52aa53 100644 --- a/ksplashml/pics/themes/blue-bend/splash_bottom.png +++ b/ksplashml/pics/themes/blue-bend/splash_bottom.png diff --git a/ksplashml/pics/themes/blue-bend/splash_inactive_bar.png b/ksplashml/pics/themes/blue-bend/splash_inactive_bar.png Binary files differindex 7cfebc0f7..047ca9136 100644 --- a/ksplashml/pics/themes/blue-bend/splash_inactive_bar.png +++ b/ksplashml/pics/themes/blue-bend/splash_inactive_bar.png diff --git a/ksplashml/pics/themes/blue-bend/splash_top.png b/ksplashml/pics/themes/blue-bend/splash_top.png Binary files differindex bfcd8637b..1dcc548fd 100644 --- a/ksplashml/pics/themes/blue-bend/splash_top.png +++ b/ksplashml/pics/themes/blue-bend/splash_top.png diff --git a/ksplashml/pics/themes/default/Preview.png b/ksplashml/pics/themes/default/Preview.png Binary files differindex 25eae1721..e6a2efc34 100644 --- a/ksplashml/pics/themes/default/Preview.png +++ b/ksplashml/pics/themes/default/Preview.png diff --git a/ksplashml/pics/themes/default/splash_active_bar.png b/ksplashml/pics/themes/default/splash_active_bar.png Binary files differindex 10bef1e14..2586ec4f3 100644 --- a/ksplashml/pics/themes/default/splash_active_bar.png +++ b/ksplashml/pics/themes/default/splash_active_bar.png diff --git a/ksplashml/pics/themes/default/splash_inactive_bar.png b/ksplashml/pics/themes/default/splash_inactive_bar.png Binary files differindex e1690ee63..0d4b451cd 100644 --- a/ksplashml/pics/themes/default/splash_inactive_bar.png +++ b/ksplashml/pics/themes/default/splash_inactive_bar.png diff --git a/ksplashml/pics/themes/default/splash_top.png b/ksplashml/pics/themes/default/splash_top.png Binary files differindex d7c0c12e4..f9b305b2a 100644 --- a/ksplashml/pics/themes/default/splash_top.png +++ b/ksplashml/pics/themes/default/splash_top.png diff --git a/ksplashml/pics/themes/simple/Preview.png b/ksplashml/pics/themes/simple/Preview.png Binary files differindex 2e9b39236..453e64021 100644 --- a/ksplashml/pics/themes/simple/Preview.png +++ b/ksplashml/pics/themes/simple/Preview.png diff --git a/ksplashml/themeengine/redmond/pics/Background.png b/ksplashml/themeengine/redmond/pics/Background.png Binary files differindex a38a55d42..04750234f 100644 --- a/ksplashml/themeengine/redmond/pics/Background.png +++ b/ksplashml/themeengine/redmond/pics/Background.png diff --git a/ksplashml/themeengine/redmond/pics/Preview.png b/ksplashml/themeengine/redmond/pics/Preview.png Binary files differindex a52ec2644..121d2e73b 100644 --- a/ksplashml/themeengine/redmond/pics/Preview.png +++ b/ksplashml/themeengine/redmond/pics/Preview.png diff --git a/ksplashml/themeengine/standard/Preview.png b/ksplashml/themeengine/standard/Preview.png Binary files differindex 438d5490a..b2ce44163 100644 --- a/ksplashml/themeengine/standard/Preview.png +++ b/ksplashml/themeengine/standard/Preview.png diff --git a/ksplashml/themeengine/standard/pics/Preview.png b/ksplashml/themeengine/standard/pics/Preview.png Binary files differindex 3fd4ce9fe..4fb01119e 100644 --- a/ksplashml/themeengine/standard/pics/Preview.png +++ b/ksplashml/themeengine/standard/pics/Preview.png diff --git a/ksysguard/cr128-app-ksysguard.png b/ksysguard/cr128-app-ksysguard.png Binary files differindex f2223cde8..0c6dfccd3 100644 --- a/ksysguard/cr128-app-ksysguard.png +++ b/ksysguard/cr128-app-ksysguard.png diff --git a/ksysguard/cr16-app-ksysguard.png b/ksysguard/cr16-app-ksysguard.png Binary files differindex 1c2e678da..cecd11967 100644 --- a/ksysguard/cr16-app-ksysguard.png +++ b/ksysguard/cr16-app-ksysguard.png diff --git a/ksysguard/cr32-app-ksysguard.png b/ksysguard/cr32-app-ksysguard.png Binary files differindex 53005ff57..507fb7f74 100644 --- a/ksysguard/cr32-app-ksysguard.png +++ b/ksysguard/cr32-app-ksysguard.png diff --git a/ksysguard/cr48-app-ksysguard.png b/ksysguard/cr48-app-ksysguard.png Binary files differindex b636ff0e6..e6580ca8b 100644 --- a/ksysguard/cr48-app-ksysguard.png +++ b/ksysguard/cr48-app-ksysguard.png diff --git a/ksysguard/cr64-app-ksysguard.png b/ksysguard/cr64-app-ksysguard.png Binary files differindex 95ef34953..5f9f6bda1 100644 --- a/ksysguard/cr64-app-ksysguard.png +++ b/ksysguard/cr64-app-ksysguard.png diff --git a/ksysguard/pics/X.png b/ksysguard/pics/X.png Binary files differindex 5b0742f87..028fe59c3 100644 --- a/ksysguard/pics/X.png +++ b/ksysguard/pics/X.png diff --git a/ksysguard/pics/computer.png b/ksysguard/pics/computer.png Binary files differindex 85a078c13..4e2785ff1 100644 --- a/ksysguard/pics/computer.png +++ b/ksysguard/pics/computer.png diff --git a/ksysguard/pics/daemon.png b/ksysguard/pics/daemon.png Binary files differindex f21b3abfc..b879ae36a 100644 --- a/ksysguard/pics/daemon.png +++ b/ksysguard/pics/daemon.png diff --git a/ksysguard/pics/kernel.png b/ksysguard/pics/kernel.png Binary files differindex 9e8c0d8dc..93789d100 100644 --- a/ksysguard/pics/kernel.png +++ b/ksysguard/pics/kernel.png diff --git a/ksysguard/pics/ksysguardd.png b/ksysguard/pics/ksysguardd.png Binary files differindex ee4c6377d..ab4a33ce2 100644 --- a/ksysguard/pics/ksysguardd.png +++ b/ksysguard/pics/ksysguardd.png diff --git a/ksysguard/pics/running.png b/ksysguard/pics/running.png Binary files differindex 543710fb7..c42dd0489 100644 --- a/ksysguard/pics/running.png +++ b/ksysguard/pics/running.png diff --git a/ksysguard/pics/shell.png b/ksysguard/pics/shell.png Binary files differindex d7c7bc271..40b6b8632 100644 --- a/ksysguard/pics/shell.png +++ b/ksysguard/pics/shell.png diff --git a/ksysguard/pics/tdeapp.png b/ksysguard/pics/tdeapp.png Binary files differindex cc79b9511..9ab44b1bf 100644 --- a/ksysguard/pics/tdeapp.png +++ b/ksysguard/pics/tdeapp.png diff --git a/ksysguard/pics/tools.png b/ksysguard/pics/tools.png Binary files differindex 95bd319ce..b7c78e82f 100644 --- a/ksysguard/pics/tools.png +++ b/ksysguard/pics/tools.png diff --git a/ksysguard/pics/unknownapp.png b/ksysguard/pics/unknownapp.png Binary files differindex 2206448e4..7493e64ed 100644 --- a/ksysguard/pics/unknownapp.png +++ b/ksysguard/pics/unknownapp.png diff --git a/ksysguard/pics/waiting.png b/ksysguard/pics/waiting.png Binary files differindex 2415dfc78..650985328 100644 --- a/ksysguard/pics/waiting.png +++ b/ksysguard/pics/waiting.png diff --git a/ktip/hi128-app-ktip.png b/ktip/hi128-app-ktip.png Binary files differindex fa2626a57..9f6896f70 100644 --- a/ktip/hi128-app-ktip.png +++ b/ktip/hi128-app-ktip.png diff --git a/ktip/hi16-app-ktip.png b/ktip/hi16-app-ktip.png Binary files differindex 2b206f2a4..8c8f428d5 100644 --- a/ktip/hi16-app-ktip.png +++ b/ktip/hi16-app-ktip.png diff --git a/ktip/hi22-app-ktip.png b/ktip/hi22-app-ktip.png Binary files differindex 25d789431..6f2b4aaa2 100644 --- a/ktip/hi22-app-ktip.png +++ b/ktip/hi22-app-ktip.png diff --git a/ktip/hi32-app-ktip.png b/ktip/hi32-app-ktip.png Binary files differindex ee1b839ab..4a2822050 100644 --- a/ktip/hi32-app-ktip.png +++ b/ktip/hi32-app-ktip.png diff --git a/ktip/hi48-app-ktip.png b/ktip/hi48-app-ktip.png Binary files differindex de04d3aa7..ef9d44e27 100644 --- a/ktip/hi48-app-ktip.png +++ b/ktip/hi48-app-ktip.png diff --git a/ktip/hi64-app-ktip.png b/ktip/hi64-app-ktip.png Binary files differindex 3741faba6..0707f9a48 100644 --- a/ktip/hi64-app-ktip.png +++ b/ktip/hi64-app-ktip.png diff --git a/ktip/pics/wizard_small.png b/ktip/pics/wizard_small.png Binary files differindex 49e492058..a35b8eaeb 100644 --- a/ktip/pics/wizard_small.png +++ b/ktip/pics/wizard_small.png diff --git a/kxkb/kcmmisc.cpp b/kxkb/kcmmisc.cpp index 1687b1c81..358d10450 100644 --- a/kxkb/kcmmisc.cpp +++ b/kxkb/kcmmisc.cpp @@ -274,26 +274,27 @@ int xkb_init() && XkbQueryExtension( dpy, &xkb_opcode, &xkb_event, &xkb_error, &xkb_lmaj, &xkb_lmin ); } - + unsigned int xkb_mask_modifier( XkbDescPtr xkb, const char *name ) - { +{ int i; if( !xkb || !xkb->names ) return 0; - for( i = 0; - i < XkbNumVirtualMods; - i++ ) - { + for( i = 0; i < XkbNumVirtualMods; i++ ) { char* modStr = XGetAtomName( xkb->dpy, xkb->names->vmods[i] ); - if( modStr != NULL && strcmp(name, modStr) == 0 ) - { + if( modStr == NULL ) { + continue; + } + if( strcmp(name, modStr) == 0 ) { unsigned int mask; XkbVirtualModsToReal( xkb, 1 << i, &mask ); + XFree(modStr); return mask; - } } - return 0; + XFree(modStr); } + return 0; +} unsigned int xkb_numlock_mask() { diff --git a/kxkb/pics/hi16-app-kxkb.png b/kxkb/pics/hi16-app-kxkb.png Binary files differindex cdc03064a..6a9dec5a0 100644 --- a/kxkb/pics/hi16-app-kxkb.png +++ b/kxkb/pics/hi16-app-kxkb.png diff --git a/kxkb/pics/hi32-app-kxkb.png b/kxkb/pics/hi32-app-kxkb.png Binary files differindex c34e2ebc4..5a6ab6a8e 100644 --- a/kxkb/pics/hi32-app-kxkb.png +++ b/kxkb/pics/hi32-app-kxkb.png diff --git a/kxkb/pics/hi48-app-kxkb.png b/kxkb/pics/hi48-app-kxkb.png Binary files differindex d9d7b78be..3a030ce18 100644 --- a/kxkb/pics/hi48-app-kxkb.png +++ b/kxkb/pics/hi48-app-kxkb.png diff --git a/l10n/C/flag.png b/l10n/C/flag.png Binary files differindex 1eca43469..346906736 100644 --- a/l10n/C/flag.png +++ b/l10n/C/flag.png diff --git a/l10n/ad/flag.png b/l10n/ad/flag.png Binary files differindex f44fe9dc5..fbc8f5601 100644 --- a/l10n/ad/flag.png +++ b/l10n/ad/flag.png diff --git a/l10n/ae/flag.png b/l10n/ae/flag.png Binary files differindex 2e9f3cdaf..0920cd194 100644 --- a/l10n/ae/flag.png +++ b/l10n/ae/flag.png diff --git a/l10n/af/flag.png b/l10n/af/flag.png Binary files differindex 9ced727e4..15ecd0755 100644 --- a/l10n/af/flag.png +++ b/l10n/af/flag.png diff --git a/l10n/ag/flag.png b/l10n/ag/flag.png Binary files differindex 5c2b59017..14b749cff 100644 --- a/l10n/ag/flag.png +++ b/l10n/ag/flag.png diff --git a/l10n/ai/flag.png b/l10n/ai/flag.png Binary files differindex 17a4ddb41..ffabbe9dc 100644 --- a/l10n/ai/flag.png +++ b/l10n/ai/flag.png diff --git a/l10n/al/flag.png b/l10n/al/flag.png Binary files differindex 29b2bd87c..4a6bcbd6a 100644 --- a/l10n/al/flag.png +++ b/l10n/al/flag.png diff --git a/l10n/am/flag.png b/l10n/am/flag.png Binary files differindex d2a51a5f2..7b3a6d297 100644 --- a/l10n/am/flag.png +++ b/l10n/am/flag.png diff --git a/l10n/an/flag.png b/l10n/an/flag.png Binary files differindex 484c65308..cabad6c3b 100644 --- a/l10n/an/flag.png +++ b/l10n/an/flag.png diff --git a/l10n/ao/flag.png b/l10n/ao/flag.png Binary files differindex f1baae9d9..045c0a37a 100644 --- a/l10n/ao/flag.png +++ b/l10n/ao/flag.png diff --git a/l10n/ar/flag.png b/l10n/ar/flag.png Binary files differindex fc88ee431..f4f90ccce 100644 --- a/l10n/ar/flag.png +++ b/l10n/ar/flag.png diff --git a/l10n/as/flag.png b/l10n/as/flag.png Binary files differindex d08b0c7b9..3b8e62be3 100644 --- a/l10n/as/flag.png +++ b/l10n/as/flag.png diff --git a/l10n/at/flag.png b/l10n/at/flag.png Binary files differindex 265286ae6..533368340 100644 --- a/l10n/at/flag.png +++ b/l10n/at/flag.png diff --git a/l10n/au/flag.png b/l10n/au/flag.png Binary files differindex 617852fd0..f8e838bb9 100644 --- a/l10n/au/flag.png +++ b/l10n/au/flag.png diff --git a/l10n/aw/flag.png b/l10n/aw/flag.png Binary files differindex cf2a4f785..983731cfe 100644 --- a/l10n/aw/flag.png +++ b/l10n/aw/flag.png diff --git a/l10n/az/flag.png b/l10n/az/flag.png Binary files differindex dd5f5fc49..2e8b2454d 100644 --- a/l10n/az/flag.png +++ b/l10n/az/flag.png diff --git a/l10n/ba/flag.png b/l10n/ba/flag.png Binary files differindex 965f36786..a38629275 100644 --- a/l10n/ba/flag.png +++ b/l10n/ba/flag.png diff --git a/l10n/bb/flag.png b/l10n/bb/flag.png Binary files differindex b0f05ca1b..13038f153 100644 --- a/l10n/bb/flag.png +++ b/l10n/bb/flag.png diff --git a/l10n/bd/flag.png b/l10n/bd/flag.png Binary files differindex fa6537f18..0c6bb2ea3 100644 --- a/l10n/bd/flag.png +++ b/l10n/bd/flag.png diff --git a/l10n/be/flag.png b/l10n/be/flag.png Binary files differindex 577101621..0a86c4e8b 100644 --- a/l10n/be/flag.png +++ b/l10n/be/flag.png diff --git a/l10n/bf/flag.png b/l10n/bf/flag.png Binary files differindex f4863e595..6c96682dc 100644 --- a/l10n/bf/flag.png +++ b/l10n/bf/flag.png diff --git a/l10n/bg/flag.png b/l10n/bg/flag.png Binary files differindex 52abee73a..d9e01788e 100644 --- a/l10n/bg/flag.png +++ b/l10n/bg/flag.png diff --git a/l10n/bh/flag.png b/l10n/bh/flag.png Binary files differindex ae0d6174d..58fec0065 100644 --- a/l10n/bh/flag.png +++ b/l10n/bh/flag.png diff --git a/l10n/bi/flag.png b/l10n/bi/flag.png Binary files differindex a1723add8..b095d2fe4 100644 --- a/l10n/bi/flag.png +++ b/l10n/bi/flag.png diff --git a/l10n/bj/flag.png b/l10n/bj/flag.png Binary files differindex 7a12c3723..f5e23daf6 100644 --- a/l10n/bj/flag.png +++ b/l10n/bj/flag.png diff --git a/l10n/bm/flag.png b/l10n/bm/flag.png Binary files differindex 4ef5afc84..185fa9d0d 100644 --- a/l10n/bm/flag.png +++ b/l10n/bm/flag.png diff --git a/l10n/bn/flag.png b/l10n/bn/flag.png Binary files differindex 58de804c3..5d5d18f74 100644 --- a/l10n/bn/flag.png +++ b/l10n/bn/flag.png diff --git a/l10n/bo/flag.png b/l10n/bo/flag.png Binary files differindex 239bccd80..106517163 100644 --- a/l10n/bo/flag.png +++ b/l10n/bo/flag.png diff --git a/l10n/br/flag.png b/l10n/br/flag.png Binary files differindex 5f12ae2fa..130042070 100644 --- a/l10n/br/flag.png +++ b/l10n/br/flag.png diff --git a/l10n/bs/flag.png b/l10n/bs/flag.png Binary files differindex b232b475c..ef6139729 100644 --- a/l10n/bs/flag.png +++ b/l10n/bs/flag.png diff --git a/l10n/bt/flag.png b/l10n/bt/flag.png Binary files differindex a0ecc2f6f..4fba054ed 100644 --- a/l10n/bt/flag.png +++ b/l10n/bt/flag.png diff --git a/l10n/bw/flag.png b/l10n/bw/flag.png Binary files differindex 465d57427..10e10fa28 100644 --- a/l10n/bw/flag.png +++ b/l10n/bw/flag.png diff --git a/l10n/by/flag.png b/l10n/by/flag.png Binary files differindex a97922f75..45c254d2b 100644 --- a/l10n/by/flag.png +++ b/l10n/by/flag.png diff --git a/l10n/bz/flag.png b/l10n/bz/flag.png Binary files differindex 50fc8bb84..5c9dc9167 100644 --- a/l10n/bz/flag.png +++ b/l10n/bz/flag.png diff --git a/l10n/ca/flag.png b/l10n/ca/flag.png Binary files differindex 4e4305cc8..35993331f 100644 --- a/l10n/ca/flag.png +++ b/l10n/ca/flag.png diff --git a/l10n/cc/flag.png b/l10n/cc/flag.png Binary files differindex 742c38414..1fdb1c660 100644 --- a/l10n/cc/flag.png +++ b/l10n/cc/flag.png diff --git a/l10n/cd/flag.png b/l10n/cd/flag.png Binary files differindex 27fac92f1..79f6cbeb0 100644 --- a/l10n/cd/flag.png +++ b/l10n/cd/flag.png diff --git a/l10n/cf/flag.png b/l10n/cf/flag.png Binary files differindex 22ffa4566..531dfec8a 100644 --- a/l10n/cf/flag.png +++ b/l10n/cf/flag.png diff --git a/l10n/cg/flag.png b/l10n/cg/flag.png Binary files differindex 17dc6f559..120b427cd 100644 --- a/l10n/cg/flag.png +++ b/l10n/cg/flag.png diff --git a/l10n/ch/flag.png b/l10n/ch/flag.png Binary files differindex 423070fb8..2247b3991 100644 --- a/l10n/ch/flag.png +++ b/l10n/ch/flag.png diff --git a/l10n/ci/flag.png b/l10n/ci/flag.png Binary files differindex 8de82f30e..654ee7884 100644 --- a/l10n/ci/flag.png +++ b/l10n/ci/flag.png diff --git a/l10n/ck/flag.png b/l10n/ck/flag.png Binary files differindex b607549e8..5ce1c612f 100644 --- a/l10n/ck/flag.png +++ b/l10n/ck/flag.png diff --git a/l10n/cl/flag.png b/l10n/cl/flag.png Binary files differindex 82b7d140a..6c11f6bdc 100644 --- a/l10n/cl/flag.png +++ b/l10n/cl/flag.png diff --git a/l10n/cm/flag.png b/l10n/cm/flag.png Binary files differindex c1c77346a..41232b282 100644 --- a/l10n/cm/flag.png +++ b/l10n/cm/flag.png diff --git a/l10n/cn/flag.png b/l10n/cn/flag.png Binary files differindex 9bfcc812c..dfc481b7e 100644 --- a/l10n/cn/flag.png +++ b/l10n/cn/flag.png diff --git a/l10n/co/flag.png b/l10n/co/flag.png Binary files differindex ba3227c73..e63cdfb27 100644 --- a/l10n/co/flag.png +++ b/l10n/co/flag.png diff --git a/l10n/cr/flag.png b/l10n/cr/flag.png Binary files differindex 0734f26f7..652c9175e 100644 --- a/l10n/cr/flag.png +++ b/l10n/cr/flag.png diff --git a/l10n/cu/flag.png b/l10n/cu/flag.png Binary files differindex cc8ab0b28..a937d1848 100644 --- a/l10n/cu/flag.png +++ b/l10n/cu/flag.png diff --git a/l10n/cv/flag.png b/l10n/cv/flag.png Binary files differindex 91633702a..2bda40a93 100644 --- a/l10n/cv/flag.png +++ b/l10n/cv/flag.png diff --git a/l10n/cx/flag.png b/l10n/cx/flag.png Binary files differindex 120a3c457..346f98b58 100644 --- a/l10n/cx/flag.png +++ b/l10n/cx/flag.png diff --git a/l10n/cy/flag.png b/l10n/cy/flag.png Binary files differindex da0514f20..e0d49fd73 100644 --- a/l10n/cy/flag.png +++ b/l10n/cy/flag.png diff --git a/l10n/cz/flag.png b/l10n/cz/flag.png Binary files differindex 3b4cc0ea7..c0cd5feb0 100644 --- a/l10n/cz/flag.png +++ b/l10n/cz/flag.png diff --git a/l10n/de/flag.png b/l10n/de/flag.png Binary files differindex 8af614fa9..5cf8fd97e 100644 --- a/l10n/de/flag.png +++ b/l10n/de/flag.png diff --git a/l10n/dj/flag.png b/l10n/dj/flag.png Binary files differindex 1445d1947..8cbda05eb 100644 --- a/l10n/dj/flag.png +++ b/l10n/dj/flag.png diff --git a/l10n/dk/flag.png b/l10n/dk/flag.png Binary files differindex e67d42af6..a0b8a8356 100644 --- a/l10n/dk/flag.png +++ b/l10n/dk/flag.png diff --git a/l10n/dm/flag.png b/l10n/dm/flag.png Binary files differindex fbb3c6844..78aa2f347 100644 --- a/l10n/dm/flag.png +++ b/l10n/dm/flag.png diff --git a/l10n/do/flag.png b/l10n/do/flag.png Binary files differindex a506408b9..6feefe465 100644 --- a/l10n/do/flag.png +++ b/l10n/do/flag.png diff --git a/l10n/dz/flag.png b/l10n/dz/flag.png Binary files differindex a072f95f5..c53a097cd 100644 --- a/l10n/dz/flag.png +++ b/l10n/dz/flag.png diff --git a/l10n/ec/flag.png b/l10n/ec/flag.png Binary files differindex 33fd40e3e..b2d720b87 100644 --- a/l10n/ec/flag.png +++ b/l10n/ec/flag.png diff --git a/l10n/ee/flag.png b/l10n/ee/flag.png Binary files differindex d34e3111a..dd5c4a0bb 100644 --- a/l10n/ee/flag.png +++ b/l10n/ee/flag.png diff --git a/l10n/eg/flag.png b/l10n/eg/flag.png Binary files differindex bdb564fd8..d73bd2f6e 100644 --- a/l10n/eg/flag.png +++ b/l10n/eg/flag.png diff --git a/l10n/eh/flag.png b/l10n/eh/flag.png Binary files differindex 6d2982a00..9c6711314 100644 --- a/l10n/eh/flag.png +++ b/l10n/eh/flag.png diff --git a/l10n/er/flag.png b/l10n/er/flag.png Binary files differindex 0a72d5227..4ab0bc0da 100644 --- a/l10n/er/flag.png +++ b/l10n/er/flag.png diff --git a/l10n/es/flag.png b/l10n/es/flag.png Binary files differindex a86a68984..269c1fba0 100644 --- a/l10n/es/flag.png +++ b/l10n/es/flag.png diff --git a/l10n/et/flag.png b/l10n/et/flag.png Binary files differindex 1e1f224f9..e2ec68bcc 100644 --- a/l10n/et/flag.png +++ b/l10n/et/flag.png diff --git a/l10n/fi/flag.png b/l10n/fi/flag.png Binary files differindex 3d88b2d2f..10ff1d3e5 100644 --- a/l10n/fi/flag.png +++ b/l10n/fi/flag.png diff --git a/l10n/fj/flag.png b/l10n/fj/flag.png Binary files differindex 637817d90..ab6ab1814 100644 --- a/l10n/fj/flag.png +++ b/l10n/fj/flag.png diff --git a/l10n/fk/flag.png b/l10n/fk/flag.png Binary files differindex 18d7b2059..7a8121065 100644 --- a/l10n/fk/flag.png +++ b/l10n/fk/flag.png diff --git a/l10n/fm/flag.png b/l10n/fm/flag.png Binary files differindex edc05cfda..c25664f0c 100644 --- a/l10n/fm/flag.png +++ b/l10n/fm/flag.png diff --git a/l10n/fo/flag.png b/l10n/fo/flag.png Binary files differindex 81d0858c7..e6d14f3dc 100644 --- a/l10n/fo/flag.png +++ b/l10n/fo/flag.png diff --git a/l10n/fr/flag.png b/l10n/fr/flag.png Binary files differindex dfa5e70ad..1f838c4e4 100644 --- a/l10n/fr/flag.png +++ b/l10n/fr/flag.png diff --git a/l10n/ga/flag.png b/l10n/ga/flag.png Binary files differindex 6c766466c..87f924b68 100644 --- a/l10n/ga/flag.png +++ b/l10n/ga/flag.png diff --git a/l10n/gb/flag.png b/l10n/gb/flag.png Binary files differindex 09e340d06..0cab30b34 100644 --- a/l10n/gb/flag.png +++ b/l10n/gb/flag.png diff --git a/l10n/gd/flag.png b/l10n/gd/flag.png Binary files differindex de907ef51..212c3d280 100644 --- a/l10n/gd/flag.png +++ b/l10n/gd/flag.png diff --git a/l10n/ge/flag.png b/l10n/ge/flag.png Binary files differindex 23a7b4daf..6913d6fce 100644 --- a/l10n/ge/flag.png +++ b/l10n/ge/flag.png diff --git a/l10n/gh/flag.png b/l10n/gh/flag.png Binary files differindex 72ecd1108..4fd0f4755 100644 --- a/l10n/gh/flag.png +++ b/l10n/gh/flag.png diff --git a/l10n/gi/flag.png b/l10n/gi/flag.png Binary files differindex e307cd886..445f23df3 100644 --- a/l10n/gi/flag.png +++ b/l10n/gi/flag.png diff --git a/l10n/gl/flag.png b/l10n/gl/flag.png Binary files differindex fe3ad00ea..8a1ae6a48 100644 --- a/l10n/gl/flag.png +++ b/l10n/gl/flag.png diff --git a/l10n/gm/flag.png b/l10n/gm/flag.png Binary files differindex f3e6987d8..589348a56 100644 --- a/l10n/gm/flag.png +++ b/l10n/gm/flag.png diff --git a/l10n/gn/flag.png b/l10n/gn/flag.png Binary files differindex 1e5d301d6..ce0d31d0f 100644 --- a/l10n/gn/flag.png +++ b/l10n/gn/flag.png diff --git a/l10n/gp/flag.png b/l10n/gp/flag.png Binary files differindex e8c265c6b..0d231f385 100644 --- a/l10n/gp/flag.png +++ b/l10n/gp/flag.png diff --git a/l10n/gq/flag.png b/l10n/gq/flag.png Binary files differindex 9e9140d07..e68d28b94 100644 --- a/l10n/gq/flag.png +++ b/l10n/gq/flag.png diff --git a/l10n/gr/flag.png b/l10n/gr/flag.png Binary files differindex ea851be85..79bf55176 100644 --- a/l10n/gr/flag.png +++ b/l10n/gr/flag.png diff --git a/l10n/gt/flag.png b/l10n/gt/flag.png Binary files differindex 05550ae9f..19ae3ffc6 100644 --- a/l10n/gt/flag.png +++ b/l10n/gt/flag.png diff --git a/l10n/gu/flag.png b/l10n/gu/flag.png Binary files differindex 995b7f9e9..42676a1d8 100644 --- a/l10n/gu/flag.png +++ b/l10n/gu/flag.png diff --git a/l10n/gw/flag.png b/l10n/gw/flag.png Binary files differindex 904ce6a98..f791da48d 100644 --- a/l10n/gw/flag.png +++ b/l10n/gw/flag.png diff --git a/l10n/gy/flag.png b/l10n/gy/flag.png Binary files differindex f90d44f26..f6069a32b 100644 --- a/l10n/gy/flag.png +++ b/l10n/gy/flag.png diff --git a/l10n/hk/flag.png b/l10n/hk/flag.png Binary files differindex c4d10355d..86d098ed0 100644 --- a/l10n/hk/flag.png +++ b/l10n/hk/flag.png diff --git a/l10n/hn/flag.png b/l10n/hn/flag.png Binary files differindex 3bcdaf9f5..8f5f63526 100644 --- a/l10n/hn/flag.png +++ b/l10n/hn/flag.png diff --git a/l10n/hr/flag.png b/l10n/hr/flag.png Binary files differindex d179cff2a..6af0f205e 100644 --- a/l10n/hr/flag.png +++ b/l10n/hr/flag.png diff --git a/l10n/ht/flag.png b/l10n/ht/flag.png Binary files differindex 2ba756cab..9e24c4d4f 100644 --- a/l10n/ht/flag.png +++ b/l10n/ht/flag.png diff --git a/l10n/hu/flag.png b/l10n/hu/flag.png Binary files differindex ab4636411..8ffc67d10 100644 --- a/l10n/hu/flag.png +++ b/l10n/hu/flag.png diff --git a/l10n/id/flag.png b/l10n/id/flag.png Binary files differindex e42cdc091..fd94581e8 100644 --- a/l10n/id/flag.png +++ b/l10n/id/flag.png diff --git a/l10n/ie/flag.png b/l10n/ie/flag.png Binary files differindex 787d70aca..8749cfb3c 100644 --- a/l10n/ie/flag.png +++ b/l10n/ie/flag.png diff --git a/l10n/il/flag.png b/l10n/il/flag.png Binary files differindex c6ea914df..05f794826 100644 --- a/l10n/il/flag.png +++ b/l10n/il/flag.png diff --git a/l10n/in/flag.png b/l10n/in/flag.png Binary files differindex 53b3aaa48..bcf417f9b 100644 --- a/l10n/in/flag.png +++ b/l10n/in/flag.png diff --git a/l10n/iq/flag.png b/l10n/iq/flag.png Binary files differindex ba66015e9..c200370a0 100644 --- a/l10n/iq/flag.png +++ b/l10n/iq/flag.png diff --git a/l10n/ir/flag.png b/l10n/ir/flag.png Binary files differindex d8d3a5efc..355dd7e2d 100644 --- a/l10n/ir/flag.png +++ b/l10n/ir/flag.png diff --git a/l10n/is/flag.png b/l10n/is/flag.png Binary files differindex e59bf7ecd..734cf083f 100644 --- a/l10n/is/flag.png +++ b/l10n/is/flag.png diff --git a/l10n/it/flag.png b/l10n/it/flag.png Binary files differindex 264a171a8..b5cc3caec 100644 --- a/l10n/it/flag.png +++ b/l10n/it/flag.png diff --git a/l10n/jm/flag.png b/l10n/jm/flag.png Binary files differindex e2475a5a6..ed459f05d 100644 --- a/l10n/jm/flag.png +++ b/l10n/jm/flag.png diff --git a/l10n/jo/flag.png b/l10n/jo/flag.png Binary files differindex a886fc40a..16de925d2 100644 --- a/l10n/jo/flag.png +++ b/l10n/jo/flag.png diff --git a/l10n/jp/flag.png b/l10n/jp/flag.png Binary files differindex b441f4472..c61eee796 100644 --- a/l10n/jp/flag.png +++ b/l10n/jp/flag.png diff --git a/l10n/ke/flag.png b/l10n/ke/flag.png Binary files differindex 39031cf69..4b409357a 100644 --- a/l10n/ke/flag.png +++ b/l10n/ke/flag.png diff --git a/l10n/kg/flag.png b/l10n/kg/flag.png Binary files differindex 78ea9145d..1176b0fbb 100644 --- a/l10n/kg/flag.png +++ b/l10n/kg/flag.png diff --git a/l10n/kh/flag.png b/l10n/kh/flag.png Binary files differindex 6e95dded9..e61395cab 100644 --- a/l10n/kh/flag.png +++ b/l10n/kh/flag.png diff --git a/l10n/ki/flag.png b/l10n/ki/flag.png Binary files differindex 993e6c185..4910e5dc2 100644 --- a/l10n/ki/flag.png +++ b/l10n/ki/flag.png diff --git a/l10n/km/flag.png b/l10n/km/flag.png Binary files differindex dbfea26cc..238a0846c 100644 --- a/l10n/km/flag.png +++ b/l10n/km/flag.png diff --git a/l10n/kn/flag.png b/l10n/kn/flag.png Binary files differindex 31031bed4..c39430653 100644 --- a/l10n/kn/flag.png +++ b/l10n/kn/flag.png diff --git a/l10n/kp/flag.png b/l10n/kp/flag.png Binary files differindex 04ff85248..6ca889e06 100644 --- a/l10n/kp/flag.png +++ b/l10n/kp/flag.png diff --git a/l10n/kr/flag.png b/l10n/kr/flag.png Binary files differindex bbac7b646..e332a5aec 100644 --- a/l10n/kr/flag.png +++ b/l10n/kr/flag.png diff --git a/l10n/kw/flag.png b/l10n/kw/flag.png Binary files differindex 7c029c42d..8b1206d72 100644 --- a/l10n/kw/flag.png +++ b/l10n/kw/flag.png diff --git a/l10n/ky/flag.png b/l10n/ky/flag.png Binary files differindex 019fd4116..32b6459e2 100644 --- a/l10n/ky/flag.png +++ b/l10n/ky/flag.png diff --git a/l10n/kz/flag.png b/l10n/kz/flag.png Binary files differindex 410e12ba9..5b41e1808 100644 --- a/l10n/kz/flag.png +++ b/l10n/kz/flag.png diff --git a/l10n/la/flag.png b/l10n/la/flag.png Binary files differindex 922dbf588..94aa07256 100644 --- a/l10n/la/flag.png +++ b/l10n/la/flag.png diff --git a/l10n/lb/flag.png b/l10n/lb/flag.png Binary files differindex e20a2602d..65b1f71b1 100644 --- a/l10n/lb/flag.png +++ b/l10n/lb/flag.png diff --git a/l10n/lc/flag.png b/l10n/lc/flag.png Binary files differindex 7e65b3b70..57c1da155 100644 --- a/l10n/lc/flag.png +++ b/l10n/lc/flag.png diff --git a/l10n/li/flag.png b/l10n/li/flag.png Binary files differindex 0b0e03144..0d2050385 100644 --- a/l10n/li/flag.png +++ b/l10n/li/flag.png diff --git a/l10n/lk/flag.png b/l10n/lk/flag.png Binary files differindex 7be5e1cec..0e820d7d4 100644 --- a/l10n/lk/flag.png +++ b/l10n/lk/flag.png diff --git a/l10n/lr/flag.png b/l10n/lr/flag.png Binary files differindex d7607ef42..83b3e8d87 100644 --- a/l10n/lr/flag.png +++ b/l10n/lr/flag.png diff --git a/l10n/ls/flag.png b/l10n/ls/flag.png Binary files differindex 52fc8b754..fd1bd3b47 100644 --- a/l10n/ls/flag.png +++ b/l10n/ls/flag.png diff --git a/l10n/lt/flag.png b/l10n/lt/flag.png Binary files differindex 4e78cbcd3..5356e0734 100644 --- a/l10n/lt/flag.png +++ b/l10n/lt/flag.png diff --git a/l10n/lu/flag.png b/l10n/lu/flag.png Binary files differindex 4a6329d15..9fa189894 100644 --- a/l10n/lu/flag.png +++ b/l10n/lu/flag.png diff --git a/l10n/lv/flag.png b/l10n/lv/flag.png Binary files differindex 70c67c636..f2b790d50 100644 --- a/l10n/lv/flag.png +++ b/l10n/lv/flag.png diff --git a/l10n/ly/flag.png b/l10n/ly/flag.png Binary files differindex 97d6872a5..4dd5f9e7b 100644 --- a/l10n/ly/flag.png +++ b/l10n/ly/flag.png diff --git a/l10n/ma/flag.png b/l10n/ma/flag.png Binary files differindex 50835195d..e04147568 100644 --- a/l10n/ma/flag.png +++ b/l10n/ma/flag.png diff --git a/l10n/mc/flag.png b/l10n/mc/flag.png Binary files differindex 79f7faf1d..fed650ed0 100644 --- a/l10n/mc/flag.png +++ b/l10n/mc/flag.png diff --git a/l10n/md/flag.png b/l10n/md/flag.png Binary files differindex 648497412..0a680e35e 100644 --- a/l10n/md/flag.png +++ b/l10n/md/flag.png diff --git a/l10n/me/flag.png b/l10n/me/flag.png Binary files differindex c551f5a00..696a2ce26 100644 --- a/l10n/me/flag.png +++ b/l10n/me/flag.png diff --git a/l10n/mg/flag.png b/l10n/mg/flag.png Binary files differindex 3ba60a937..6bfa95e26 100644 --- a/l10n/mg/flag.png +++ b/l10n/mg/flag.png diff --git a/l10n/mh/flag.png b/l10n/mh/flag.png Binary files differindex 2af43ef7c..59d61c4e8 100644 --- a/l10n/mh/flag.png +++ b/l10n/mh/flag.png diff --git a/l10n/mk/flag.png b/l10n/mk/flag.png Binary files differindex b1fc6a264..851bf9152 100644 --- a/l10n/mk/flag.png +++ b/l10n/mk/flag.png diff --git a/l10n/ml/flag.png b/l10n/ml/flag.png Binary files differindex 18e06614b..641e46aec 100644 --- a/l10n/ml/flag.png +++ b/l10n/ml/flag.png diff --git a/l10n/mm/flag.png b/l10n/mm/flag.png Binary files differindex ff2ee11b2..f8d5a26a5 100644 --- a/l10n/mm/flag.png +++ b/l10n/mm/flag.png diff --git a/l10n/mn/flag.png b/l10n/mn/flag.png Binary files differindex 8f4a15c45..dad86bf4a 100644 --- a/l10n/mn/flag.png +++ b/l10n/mn/flag.png diff --git a/l10n/mo/flag.png b/l10n/mo/flag.png Binary files differindex 7ef751b55..a2854ae66 100644 --- a/l10n/mo/flag.png +++ b/l10n/mo/flag.png diff --git a/l10n/mq/flag.png b/l10n/mq/flag.png Binary files differindex 86b49650b..a39c92919 100644 --- a/l10n/mq/flag.png +++ b/l10n/mq/flag.png diff --git a/l10n/mr/flag.png b/l10n/mr/flag.png Binary files differindex 4e4c1d573..a7684b897 100644 --- a/l10n/mr/flag.png +++ b/l10n/mr/flag.png diff --git a/l10n/ms/flag.png b/l10n/ms/flag.png Binary files differindex 3b9460ef0..94e169540 100644 --- a/l10n/ms/flag.png +++ b/l10n/ms/flag.png diff --git a/l10n/mt/flag.png b/l10n/mt/flag.png Binary files differindex f5f0a8fcb..599251ccc 100644 --- a/l10n/mt/flag.png +++ b/l10n/mt/flag.png diff --git a/l10n/mu/flag.png b/l10n/mu/flag.png Binary files differindex 51e70ecae..4247b3372 100644 --- a/l10n/mu/flag.png +++ b/l10n/mu/flag.png diff --git a/l10n/mv/flag.png b/l10n/mv/flag.png Binary files differindex e125d1daf..c5204326f 100644 --- a/l10n/mv/flag.png +++ b/l10n/mv/flag.png diff --git a/l10n/mw/flag.png b/l10n/mw/flag.png Binary files differindex 1e570be4c..33e33cff1 100644 --- a/l10n/mw/flag.png +++ b/l10n/mw/flag.png diff --git a/l10n/mx/flag.png b/l10n/mx/flag.png Binary files differindex 0f4d9e6ab..f0536a225 100644 --- a/l10n/mx/flag.png +++ b/l10n/mx/flag.png diff --git a/l10n/my/flag.png b/l10n/my/flag.png Binary files differindex 393545245..f9f4295bc 100644 --- a/l10n/my/flag.png +++ b/l10n/my/flag.png diff --git a/l10n/mz/flag.png b/l10n/mz/flag.png Binary files differindex 3f32f1a00..3ea413525 100644 --- a/l10n/mz/flag.png +++ b/l10n/mz/flag.png diff --git a/l10n/na/flag.png b/l10n/na/flag.png Binary files differindex d98efcc61..1677ff71c 100644 --- a/l10n/na/flag.png +++ b/l10n/na/flag.png diff --git a/l10n/nc/flag.png b/l10n/nc/flag.png Binary files differindex b06d21b25..076df5b3e 100644 --- a/l10n/nc/flag.png +++ b/l10n/nc/flag.png diff --git a/l10n/ne/flag.png b/l10n/ne/flag.png Binary files differindex 0d5c1dabd..5881bff06 100644 --- a/l10n/ne/flag.png +++ b/l10n/ne/flag.png diff --git a/l10n/nf/flag.png b/l10n/nf/flag.png Binary files differindex 37459d9cd..9869a5461 100644 --- a/l10n/nf/flag.png +++ b/l10n/nf/flag.png diff --git a/l10n/ng/flag.png b/l10n/ng/flag.png Binary files differindex d0fbb2187..1e39ce931 100644 --- a/l10n/ng/flag.png +++ b/l10n/ng/flag.png diff --git a/l10n/ni/flag.png b/l10n/ni/flag.png Binary files differindex b60009d30..41db721e1 100644 --- a/l10n/ni/flag.png +++ b/l10n/ni/flag.png diff --git a/l10n/nl/flag.png b/l10n/nl/flag.png Binary files differindex d35a12a9d..9462408e7 100644 --- a/l10n/nl/flag.png +++ b/l10n/nl/flag.png diff --git a/l10n/no/flag.png b/l10n/no/flag.png Binary files differindex d4de76425..ba73fd393 100644 --- a/l10n/no/flag.png +++ b/l10n/no/flag.png diff --git a/l10n/np/flag.png b/l10n/np/flag.png Binary files differindex 1d479d92e..ab1b265d7 100644 --- a/l10n/np/flag.png +++ b/l10n/np/flag.png diff --git a/l10n/nr/flag.png b/l10n/nr/flag.png Binary files differindex a3efcac4a..8555cf5a0 100644 --- a/l10n/nr/flag.png +++ b/l10n/nr/flag.png diff --git a/l10n/nu/flag.png b/l10n/nu/flag.png Binary files differindex 82fbacd56..da077a241 100644 --- a/l10n/nu/flag.png +++ b/l10n/nu/flag.png diff --git a/l10n/nz/flag.png b/l10n/nz/flag.png Binary files differindex bb4d75d97..60b15f65b 100644 --- a/l10n/nz/flag.png +++ b/l10n/nz/flag.png diff --git a/l10n/om/flag.png b/l10n/om/flag.png Binary files differindex 78e5d779a..56832dfc8 100644 --- a/l10n/om/flag.png +++ b/l10n/om/flag.png diff --git a/l10n/pa/flag.png b/l10n/pa/flag.png Binary files differindex 396154084..72ef8208b 100644 --- a/l10n/pa/flag.png +++ b/l10n/pa/flag.png diff --git a/l10n/pe/flag.png b/l10n/pe/flag.png Binary files differindex 65ba16788..950612aaf 100644 --- a/l10n/pe/flag.png +++ b/l10n/pe/flag.png diff --git a/l10n/pf/flag.png b/l10n/pf/flag.png Binary files differindex a140e68e5..bde4a3cdb 100644 --- a/l10n/pf/flag.png +++ b/l10n/pf/flag.png diff --git a/l10n/pg/flag.png b/l10n/pg/flag.png Binary files differindex 092f2657a..22537ffde 100644 --- a/l10n/pg/flag.png +++ b/l10n/pg/flag.png diff --git a/l10n/ph/flag.png b/l10n/ph/flag.png Binary files differindex 875ec51bf..9227f126f 100644 --- a/l10n/ph/flag.png +++ b/l10n/ph/flag.png diff --git a/l10n/pk/flag.png b/l10n/pk/flag.png Binary files differindex c41622195..94d2daf49 100644 --- a/l10n/pk/flag.png +++ b/l10n/pk/flag.png diff --git a/l10n/pl/flag.png b/l10n/pl/flag.png Binary files differindex 735ebb30b..ec01938c6 100644 --- a/l10n/pl/flag.png +++ b/l10n/pl/flag.png diff --git a/l10n/pm/flag.png b/l10n/pm/flag.png Binary files differindex 14a435a2c..4a8ac807e 100644 --- a/l10n/pm/flag.png +++ b/l10n/pm/flag.png diff --git a/l10n/pn/flag.png b/l10n/pn/flag.png Binary files differindex b2c55872c..2ca450eb6 100644 --- a/l10n/pn/flag.png +++ b/l10n/pn/flag.png diff --git a/l10n/pr/flag.png b/l10n/pr/flag.png Binary files differindex ac9b343d2..7659f36ea 100644 --- a/l10n/pr/flag.png +++ b/l10n/pr/flag.png diff --git a/l10n/ps/flag.png b/l10n/ps/flag.png Binary files differindex fab9b33f8..ab61a9cb1 100644 --- a/l10n/ps/flag.png +++ b/l10n/ps/flag.png diff --git a/l10n/pt/flag.png b/l10n/pt/flag.png Binary files differindex f1e0e33ae..490668054 100644 --- a/l10n/pt/flag.png +++ b/l10n/pt/flag.png diff --git a/l10n/pw/flag.png b/l10n/pw/flag.png Binary files differindex e40369e7c..45c2e04d5 100644 --- a/l10n/pw/flag.png +++ b/l10n/pw/flag.png diff --git a/l10n/py/flag.png b/l10n/py/flag.png Binary files differindex 89d68d2ba..53e84bf99 100644 --- a/l10n/py/flag.png +++ b/l10n/py/flag.png diff --git a/l10n/qa/flag.png b/l10n/qa/flag.png Binary files differindex f46a5bea6..7a06ffbb0 100644 --- a/l10n/qa/flag.png +++ b/l10n/qa/flag.png diff --git a/l10n/ro/flag.png b/l10n/ro/flag.png Binary files differindex 0a38ec931..7da5cc434 100644 --- a/l10n/ro/flag.png +++ b/l10n/ro/flag.png diff --git a/l10n/rs/flag.png b/l10n/rs/flag.png Binary files differindex 0759a4c14..6c8e16da1 100644 --- a/l10n/rs/flag.png +++ b/l10n/rs/flag.png diff --git a/l10n/ru/flag.png b/l10n/ru/flag.png Binary files differindex 506f4d26e..a750b8f29 100644 --- a/l10n/ru/flag.png +++ b/l10n/ru/flag.png diff --git a/l10n/rw/flag.png b/l10n/rw/flag.png Binary files differindex 0f73d68ba..506e95bb4 100644 --- a/l10n/rw/flag.png +++ b/l10n/rw/flag.png diff --git a/l10n/sa/flag.png b/l10n/sa/flag.png Binary files differindex 0d232cec9..2ae8fe12e 100644 --- a/l10n/sa/flag.png +++ b/l10n/sa/flag.png diff --git a/l10n/sb/flag.png b/l10n/sb/flag.png Binary files differindex 3971bcbfc..fea3e34f9 100644 --- a/l10n/sb/flag.png +++ b/l10n/sb/flag.png diff --git a/l10n/sc/flag.png b/l10n/sc/flag.png Binary files differindex b0ad2726d..6931efed6 100644 --- a/l10n/sc/flag.png +++ b/l10n/sc/flag.png diff --git a/l10n/sd/flag.png b/l10n/sd/flag.png Binary files differindex 6b8c1ee46..41c8f455b 100644 --- a/l10n/sd/flag.png +++ b/l10n/sd/flag.png diff --git a/l10n/se/flag.png b/l10n/se/flag.png Binary files differindex 19d987fec..2921fb060 100644 --- a/l10n/se/flag.png +++ b/l10n/se/flag.png diff --git a/l10n/sg/flag.png b/l10n/sg/flag.png Binary files differindex 4ff08f5b8..32d3c9f24 100644 --- a/l10n/sg/flag.png +++ b/l10n/sg/flag.png diff --git a/l10n/sh/flag.png b/l10n/sh/flag.png Binary files differindex 1cdea8e4d..9398c55bd 100644 --- a/l10n/sh/flag.png +++ b/l10n/sh/flag.png diff --git a/l10n/si/flag.png b/l10n/si/flag.png Binary files differindex ea79453d3..aa5dab013 100644 --- a/l10n/si/flag.png +++ b/l10n/si/flag.png diff --git a/l10n/sk/flag.png b/l10n/sk/flag.png Binary files differindex b1024ddb1..123d7ab81 100644 --- a/l10n/sk/flag.png +++ b/l10n/sk/flag.png diff --git a/l10n/sm/flag.png b/l10n/sm/flag.png Binary files differindex 3b7f9b32b..5e4008876 100644 --- a/l10n/sm/flag.png +++ b/l10n/sm/flag.png diff --git a/l10n/sn/flag.png b/l10n/sn/flag.png Binary files differindex 6bd943d3c..de21a1906 100644 --- a/l10n/sn/flag.png +++ b/l10n/sn/flag.png diff --git a/l10n/so/flag.png b/l10n/so/flag.png Binary files differindex d18135495..d9ccea6df 100644 --- a/l10n/so/flag.png +++ b/l10n/so/flag.png diff --git a/l10n/sr/flag.png b/l10n/sr/flag.png Binary files differindex 378585f07..2a4b68ab4 100644 --- a/l10n/sr/flag.png +++ b/l10n/sr/flag.png diff --git a/l10n/st/flag.png b/l10n/st/flag.png Binary files differindex 32ea174ba..b96bf87fa 100644 --- a/l10n/st/flag.png +++ b/l10n/st/flag.png diff --git a/l10n/sv/flag.png b/l10n/sv/flag.png Binary files differindex 822522d92..9afd8ce8d 100644 --- a/l10n/sv/flag.png +++ b/l10n/sv/flag.png diff --git a/l10n/sy/flag.png b/l10n/sy/flag.png Binary files differindex b3ef1222b..713674c92 100644 --- a/l10n/sy/flag.png +++ b/l10n/sy/flag.png diff --git a/l10n/sz/flag.png b/l10n/sz/flag.png Binary files differindex 40d22dd33..9a0e0668e 100644 --- a/l10n/sz/flag.png +++ b/l10n/sz/flag.png diff --git a/l10n/tc/flag.png b/l10n/tc/flag.png Binary files differindex c52443b7f..485264e06 100644 --- a/l10n/tc/flag.png +++ b/l10n/tc/flag.png diff --git a/l10n/td/flag.png b/l10n/td/flag.png Binary files differindex 44a668d61..2a199cba1 100644 --- a/l10n/td/flag.png +++ b/l10n/td/flag.png diff --git a/l10n/tg/flag.png b/l10n/tg/flag.png Binary files differindex b27b58c00..2cd9e196f 100644 --- a/l10n/tg/flag.png +++ b/l10n/tg/flag.png diff --git a/l10n/th/flag.png b/l10n/th/flag.png Binary files differindex 22b2e4903..c2b643ba0 100644 --- a/l10n/th/flag.png +++ b/l10n/th/flag.png diff --git a/l10n/tj/flag.png b/l10n/tj/flag.png Binary files differindex 12fa62963..e91859bd4 100644 --- a/l10n/tj/flag.png +++ b/l10n/tj/flag.png diff --git a/l10n/tk/flag.png b/l10n/tk/flag.png Binary files differindex eaad68f6b..d3f023d61 100644 --- a/l10n/tk/flag.png +++ b/l10n/tk/flag.png diff --git a/l10n/tm/flag.png b/l10n/tm/flag.png Binary files differindex b416541be..e150eec76 100644 --- a/l10n/tm/flag.png +++ b/l10n/tm/flag.png diff --git a/l10n/tn/flag.png b/l10n/tn/flag.png Binary files differindex 76186a245..af2199938 100644 --- a/l10n/tn/flag.png +++ b/l10n/tn/flag.png diff --git a/l10n/to/flag.png b/l10n/to/flag.png Binary files differindex a4e054ea4..864e199a7 100644 --- a/l10n/to/flag.png +++ b/l10n/to/flag.png diff --git a/l10n/tp/flag.png b/l10n/tp/flag.png Binary files differindex fdc9580e2..6b73b58ff 100644 --- a/l10n/tp/flag.png +++ b/l10n/tp/flag.png diff --git a/l10n/tr/flag.png b/l10n/tr/flag.png Binary files differindex eeb31b9ab..4b0a75afe 100644 --- a/l10n/tr/flag.png +++ b/l10n/tr/flag.png diff --git a/l10n/tt/flag.png b/l10n/tt/flag.png Binary files differindex 55d4ac7c0..599aa9626 100644 --- a/l10n/tt/flag.png +++ b/l10n/tt/flag.png diff --git a/l10n/tv/flag.png b/l10n/tv/flag.png Binary files differindex 58023b6e6..06221fa64 100644 --- a/l10n/tv/flag.png +++ b/l10n/tv/flag.png diff --git a/l10n/tw/flag.png b/l10n/tw/flag.png Binary files differindex 8cac08474..5c502ec83 100644 --- a/l10n/tw/flag.png +++ b/l10n/tw/flag.png diff --git a/l10n/tz/flag.png b/l10n/tz/flag.png Binary files differindex 17dbf1009..61f410e27 100644 --- a/l10n/tz/flag.png +++ b/l10n/tz/flag.png diff --git a/l10n/ua/flag.png b/l10n/ua/flag.png Binary files differindex e639c6971..65958d4a2 100644 --- a/l10n/ua/flag.png +++ b/l10n/ua/flag.png diff --git a/l10n/ug/flag.png b/l10n/ug/flag.png Binary files differindex 8a67c8081..934fb9e79 100644 --- a/l10n/ug/flag.png +++ b/l10n/ug/flag.png diff --git a/l10n/us/flag.png b/l10n/us/flag.png Binary files differindex b93152483..904feebc4 100644 --- a/l10n/us/flag.png +++ b/l10n/us/flag.png diff --git a/l10n/uy/flag.png b/l10n/uy/flag.png Binary files differindex 958924552..09a7fb4eb 100644 --- a/l10n/uy/flag.png +++ b/l10n/uy/flag.png diff --git a/l10n/uz/flag.png b/l10n/uz/flag.png Binary files differindex a7736db5b..0cb007b50 100644 --- a/l10n/uz/flag.png +++ b/l10n/uz/flag.png diff --git a/l10n/va/flag.png b/l10n/va/flag.png Binary files differindex d1cebdab9..bec665957 100644 --- a/l10n/va/flag.png +++ b/l10n/va/flag.png diff --git a/l10n/vc/flag.png b/l10n/vc/flag.png Binary files differindex 0fd4ba5e2..f261d4efa 100644 --- a/l10n/vc/flag.png +++ b/l10n/vc/flag.png diff --git a/l10n/ve/flag.png b/l10n/ve/flag.png Binary files differindex 3bd73d49d..8901e4ed3 100644 --- a/l10n/ve/flag.png +++ b/l10n/ve/flag.png diff --git a/l10n/vg/flag.png b/l10n/vg/flag.png Binary files differindex 00893a7b4..e4e445e47 100644 --- a/l10n/vg/flag.png +++ b/l10n/vg/flag.png diff --git a/l10n/vi/flag.png b/l10n/vi/flag.png Binary files differindex e2458a287..23910e66b 100644 --- a/l10n/vi/flag.png +++ b/l10n/vi/flag.png diff --git a/l10n/vn/flag.png b/l10n/vn/flag.png Binary files differindex d77509ec2..ff3e26335 100644 --- a/l10n/vn/flag.png +++ b/l10n/vn/flag.png diff --git a/l10n/vu/flag.png b/l10n/vu/flag.png Binary files differindex 5912329e2..d7591ec8d 100644 --- a/l10n/vu/flag.png +++ b/l10n/vu/flag.png diff --git a/l10n/wf/flag.png b/l10n/wf/flag.png Binary files differindex e7f3b654c..c80e769c5 100644 --- a/l10n/wf/flag.png +++ b/l10n/wf/flag.png diff --git a/l10n/ws/flag.png b/l10n/ws/flag.png Binary files differindex 705d03530..ddccd3e26 100644 --- a/l10n/ws/flag.png +++ b/l10n/ws/flag.png diff --git a/l10n/ye/flag.png b/l10n/ye/flag.png Binary files differindex bcb54dfc2..9eb133070 100644 --- a/l10n/ye/flag.png +++ b/l10n/ye/flag.png diff --git a/l10n/za/flag.png b/l10n/za/flag.png Binary files differindex 0abb8fb5f..e3a28a3be 100644 --- a/l10n/za/flag.png +++ b/l10n/za/flag.png diff --git a/l10n/zm/flag.png b/l10n/zm/flag.png Binary files differindex 71de489f8..99b7aa1b9 100644 --- a/l10n/zm/flag.png +++ b/l10n/zm/flag.png diff --git a/l10n/zw/flag.png b/l10n/zw/flag.png Binary files differindex b06821f1d..5bfd4e96b 100644 --- a/l10n/zw/flag.png +++ b/l10n/zw/flag.png diff --git a/libkonq/konq_iconviewwidget.cc b/libkonq/konq_iconviewwidget.cc index 96e04df29..b51c8502d 100644 --- a/libkonq/konq_iconviewwidget.cc +++ b/libkonq/konq_iconviewwidget.cc @@ -902,7 +902,7 @@ KFileItemList KonqIconViewWidget::selectedFileItems() TQIconViewItem *it = firstItem(); for (; it; it = it->nextItem() ) - if ( it->isSelected() ) { + if ( it->isVisible() && it->isSelected() ) { KFileItem *fItem = (static_cast<KFileIVI *>(it))->item(); lstItems.append( fItem ); } @@ -969,7 +969,7 @@ KonqIconDrag * KonqIconViewWidget::konqDragObject( TQWidget * dragSource ) TQIconViewItem *primaryItem = currentItem(); // Append all items to the drag object for ( TQIconViewItem *it = firstItem(); it; it = it->nextItem() ) { - if ( it->isSelected() ) { + if ( it->isVisible() && it->isSelected() ) { if (!primaryItem) primaryItem = it; KFileItem* fileItem = (static_cast<KFileIVI *>(it))->item(); @@ -1094,7 +1094,7 @@ void KonqIconViewWidget::slotSelectionChanged() for ( TQIconViewItem *it = firstItem(); it; it = it->nextItem() ) { - if ( it->isSelected() ) + if ( it->isVisible() && it->isSelected() ) { iCount++; canCopy++; @@ -1136,7 +1136,7 @@ void KonqIconViewWidget::renameSelectedItem() TQIconViewItem * item = 0L; TQIconViewItem *it = firstItem(); for (; it; it = it->nextItem() ) - if ( it->isSelected() && !item ) + if ( it->isVisible() && it->isSelected() && !item ) { item = it; break; @@ -1184,7 +1184,7 @@ KURL::List KonqIconViewWidget::selectedUrls( UrlFlags flags ) const KURL::List lstURLs; bool dummy; for ( TQIconViewItem *it = firstItem(); it; it = it->nextItem() ) - if ( it->isSelected() ) { + if ( it->isVisible() && it->isSelected() ) { KFileItem* item = (static_cast<KFileIVI *>( it ))->item(); lstURLs.append( flags == MostLocalUrls ? item->mostLocalURL( dummy ) : item->url() ); } diff --git a/libkonq/pics/arrow_bottomleft.png b/libkonq/pics/arrow_bottomleft.png Binary files differindex 90ef9754c..465cc318b 100644 --- a/libkonq/pics/arrow_bottomleft.png +++ b/libkonq/pics/arrow_bottomleft.png diff --git a/libkonq/pics/arrow_bottomright.png b/libkonq/pics/arrow_bottomright.png Binary files differindex 92f7c9c58..d5a9b14de 100644 --- a/libkonq/pics/arrow_bottomright.png +++ b/libkonq/pics/arrow_bottomright.png diff --git a/libkonq/pics/arrow_topleft.png b/libkonq/pics/arrow_topleft.png Binary files differindex b27b6df5c..755384497 100644 --- a/libkonq/pics/arrow_topleft.png +++ b/libkonq/pics/arrow_topleft.png diff --git a/libkonq/pics/arrow_topright.png b/libkonq/pics/arrow_topright.png Binary files differindex 624b2b213..7eb81aea2 100644 --- a/libkonq/pics/arrow_topright.png +++ b/libkonq/pics/arrow_topright.png diff --git a/libkonq/pics/thumbnailfont_7x4.png b/libkonq/pics/thumbnailfont_7x4.png Binary files differindex a442e3cab..1748996d2 100644 --- a/libkonq/pics/thumbnailfont_7x4.png +++ b/libkonq/pics/thumbnailfont_7x4.png diff --git a/pics/crystalsvg/cr128-app-acroread.png b/pics/crystalsvg/cr128-app-acroread.png Binary files differindex 6a7226a48..ac3b1a0e0 100644 --- a/pics/crystalsvg/cr128-app-acroread.png +++ b/pics/crystalsvg/cr128-app-acroread.png diff --git a/pics/crystalsvg/cr128-app-applixware.png b/pics/crystalsvg/cr128-app-applixware.png Binary files differindex 1c3bdd99e..202c80442 100644 --- a/pics/crystalsvg/cr128-app-applixware.png +++ b/pics/crystalsvg/cr128-app-applixware.png diff --git a/pics/crystalsvg/cr128-app-clanbomber.png b/pics/crystalsvg/cr128-app-clanbomber.png Binary files differindex 264e93d32..b42ba4431 100644 --- a/pics/crystalsvg/cr128-app-clanbomber.png +++ b/pics/crystalsvg/cr128-app-clanbomber.png diff --git a/pics/crystalsvg/cr128-app-email.png b/pics/crystalsvg/cr128-app-email.png Binary files differindex 8689982cc..145c940d5 100644 --- a/pics/crystalsvg/cr128-app-email.png +++ b/pics/crystalsvg/cr128-app-email.png diff --git a/pics/crystalsvg/cr128-app-gimp.png b/pics/crystalsvg/cr128-app-gimp.png Binary files differindex b53b8e3f9..a7f725989 100644 --- a/pics/crystalsvg/cr128-app-gimp.png +++ b/pics/crystalsvg/cr128-app-gimp.png diff --git a/pics/crystalsvg/cr128-app-kfm_home.png b/pics/crystalsvg/cr128-app-kfm_home.png Binary files differindex 1523d6e17..74e67ba7e 100644 --- a/pics/crystalsvg/cr128-app-kfm_home.png +++ b/pics/crystalsvg/cr128-app-kfm_home.png diff --git a/pics/crystalsvg/cr128-app-licq.png b/pics/crystalsvg/cr128-app-licq.png Binary files differindex 9f960330f..f00704ccf 100644 --- a/pics/crystalsvg/cr128-app-licq.png +++ b/pics/crystalsvg/cr128-app-licq.png diff --git a/pics/crystalsvg/cr128-app-linuxconf.png b/pics/crystalsvg/cr128-app-linuxconf.png Binary files differindex bfae3f800..ec453c5eb 100644 --- a/pics/crystalsvg/cr128-app-linuxconf.png +++ b/pics/crystalsvg/cr128-app-linuxconf.png diff --git a/pics/crystalsvg/cr128-app-netscape.png b/pics/crystalsvg/cr128-app-netscape.png Binary files differindex e183115cb..505f2fb1e 100644 --- a/pics/crystalsvg/cr128-app-netscape.png +++ b/pics/crystalsvg/cr128-app-netscape.png diff --git a/pics/crystalsvg/cr128-app-package.png b/pics/crystalsvg/cr128-app-package.png Binary files differindex 4fa61f263..0935d17d1 100644 --- a/pics/crystalsvg/cr128-app-package.png +++ b/pics/crystalsvg/cr128-app-package.png diff --git a/pics/crystalsvg/cr128-app-package_applications.png b/pics/crystalsvg/cr128-app-package_applications.png Binary files differindex 87a851245..f4bf93703 100644 --- a/pics/crystalsvg/cr128-app-package_applications.png +++ b/pics/crystalsvg/cr128-app-package_applications.png diff --git a/pics/crystalsvg/cr128-app-package_favourite.png b/pics/crystalsvg/cr128-app-package_favourite.png Binary files differindex cf6878d7c..8e16ca6a9 100644 --- a/pics/crystalsvg/cr128-app-package_favourite.png +++ b/pics/crystalsvg/cr128-app-package_favourite.png diff --git a/pics/crystalsvg/cr128-app-package_settings.png b/pics/crystalsvg/cr128-app-package_settings.png Binary files differindex 3e82df6d2..091645e38 100644 --- a/pics/crystalsvg/cr128-app-package_settings.png +++ b/pics/crystalsvg/cr128-app-package_settings.png diff --git a/pics/crystalsvg/cr128-app-package_toys.png b/pics/crystalsvg/cr128-app-package_toys.png Binary files differindex 4154e59ca..5b1b51ecd 100644 --- a/pics/crystalsvg/cr128-app-package_toys.png +++ b/pics/crystalsvg/cr128-app-package_toys.png diff --git a/pics/crystalsvg/cr128-app-penguin.png b/pics/crystalsvg/cr128-app-penguin.png Binary files differindex eea4fc777..bda8fcb76 100644 --- a/pics/crystalsvg/cr128-app-penguin.png +++ b/pics/crystalsvg/cr128-app-penguin.png diff --git a/pics/crystalsvg/cr128-app-phppg.png b/pics/crystalsvg/cr128-app-phppg.png Binary files differindex 8d29243e2..50de1662e 100644 --- a/pics/crystalsvg/cr128-app-phppg.png +++ b/pics/crystalsvg/cr128-app-phppg.png diff --git a/pics/crystalsvg/cr128-app-pysol.png b/pics/crystalsvg/cr128-app-pysol.png Binary files differindex 2f962b00f..31601425e 100644 --- a/pics/crystalsvg/cr128-app-pysol.png +++ b/pics/crystalsvg/cr128-app-pysol.png diff --git a/pics/crystalsvg/cr128-app-randr.png b/pics/crystalsvg/cr128-app-randr.png Binary files differindex 868003920..6b9736b12 100644 --- a/pics/crystalsvg/cr128-app-randr.png +++ b/pics/crystalsvg/cr128-app-randr.png diff --git a/pics/crystalsvg/cr128-app-staroffice.png b/pics/crystalsvg/cr128-app-staroffice.png Binary files differindex a31773791..6afeb6684 100644 --- a/pics/crystalsvg/cr128-app-staroffice.png +++ b/pics/crystalsvg/cr128-app-staroffice.png diff --git a/pics/crystalsvg/cr128-app-systemtray.png b/pics/crystalsvg/cr128-app-systemtray.png Binary files differindex a04e6c687..c9d1531b4 100644 --- a/pics/crystalsvg/cr128-app-systemtray.png +++ b/pics/crystalsvg/cr128-app-systemtray.png diff --git a/pics/crystalsvg/cr128-app-taskbar.png b/pics/crystalsvg/cr128-app-taskbar.png Binary files differindex f825459c5..00351c4d7 100644 --- a/pics/crystalsvg/cr128-app-taskbar.png +++ b/pics/crystalsvg/cr128-app-taskbar.png diff --git a/pics/crystalsvg/cr128-app-terminal.png b/pics/crystalsvg/cr128-app-terminal.png Binary files differindex 4ef0cc384..d21bb429a 100644 --- a/pics/crystalsvg/cr128-app-terminal.png +++ b/pics/crystalsvg/cr128-app-terminal.png diff --git a/pics/crystalsvg/cr128-app-tux.png b/pics/crystalsvg/cr128-app-tux.png Binary files differindex 8e4e34b53..383006ad6 100644 --- a/pics/crystalsvg/cr128-app-tux.png +++ b/pics/crystalsvg/cr128-app-tux.png diff --git a/pics/crystalsvg/cr128-app-wp.png b/pics/crystalsvg/cr128-app-wp.png Binary files differindex c4add3f3b..bfadf0634 100644 --- a/pics/crystalsvg/cr128-app-wp.png +++ b/pics/crystalsvg/cr128-app-wp.png diff --git a/pics/crystalsvg/cr128-app-xclock.png b/pics/crystalsvg/cr128-app-xclock.png Binary files differindex 0dd2e1ef4..f0cbd9c13 100644 --- a/pics/crystalsvg/cr128-app-xclock.png +++ b/pics/crystalsvg/cr128-app-xclock.png diff --git a/pics/crystalsvg/cr128-app-xfmail.png b/pics/crystalsvg/cr128-app-xfmail.png Binary files differindex 117958165..b004c20bc 100644 --- a/pics/crystalsvg/cr128-app-xfmail.png +++ b/pics/crystalsvg/cr128-app-xfmail.png diff --git a/pics/crystalsvg/cr128-app-xmag.png b/pics/crystalsvg/cr128-app-xmag.png Binary files differindex 1808d40a8..7dbca3001 100644 --- a/pics/crystalsvg/cr128-app-xmag.png +++ b/pics/crystalsvg/cr128-app-xmag.png diff --git a/pics/crystalsvg/cr128-category-applications-development.png b/pics/crystalsvg/cr128-category-applications-development.png Binary files differindex c43758599..73bc6feac 100644 --- a/pics/crystalsvg/cr128-category-applications-development.png +++ b/pics/crystalsvg/cr128-category-applications-development.png diff --git a/pics/crystalsvg/cr128-category-applications-games.png b/pics/crystalsvg/cr128-category-applications-games.png Binary files differindex 6f2c874e1..8552722af 100644 --- a/pics/crystalsvg/cr128-category-applications-games.png +++ b/pics/crystalsvg/cr128-category-applications-games.png diff --git a/pics/crystalsvg/cr128-category-applications-internet.png b/pics/crystalsvg/cr128-category-applications-internet.png Binary files differindex 6be3abf9d..7046d1af5 100644 --- a/pics/crystalsvg/cr128-category-applications-internet.png +++ b/pics/crystalsvg/cr128-category-applications-internet.png diff --git a/pics/crystalsvg/cr128-category-applications-multimedia.png b/pics/crystalsvg/cr128-category-applications-multimedia.png Binary files differindex e04f1e181..eea921b25 100644 --- a/pics/crystalsvg/cr128-category-applications-multimedia.png +++ b/pics/crystalsvg/cr128-category-applications-multimedia.png diff --git a/pics/crystalsvg/cr128-category-applications-utilities.png b/pics/crystalsvg/cr128-category-applications-utilities.png Binary files differindex b07c23f92..4c978cb40 100644 --- a/pics/crystalsvg/cr128-category-applications-utilities.png +++ b/pics/crystalsvg/cr128-category-applications-utilities.png diff --git a/pics/crystalsvg/cr16-app-abiword.png b/pics/crystalsvg/cr16-app-abiword.png Binary files differindex 6d540a466..4c8830fcd 100644 --- a/pics/crystalsvg/cr16-app-abiword.png +++ b/pics/crystalsvg/cr16-app-abiword.png diff --git a/pics/crystalsvg/cr16-app-acroread.png b/pics/crystalsvg/cr16-app-acroread.png Binary files differindex e8efdbfa2..03494ef8b 100644 --- a/pics/crystalsvg/cr16-app-acroread.png +++ b/pics/crystalsvg/cr16-app-acroread.png diff --git a/pics/crystalsvg/cr16-app-alevt.png b/pics/crystalsvg/cr16-app-alevt.png Binary files differindex 77fe43617..394b6528a 100644 --- a/pics/crystalsvg/cr16-app-alevt.png +++ b/pics/crystalsvg/cr16-app-alevt.png diff --git a/pics/crystalsvg/cr16-app-applixware.png b/pics/crystalsvg/cr16-app-applixware.png Binary files differindex e782ec27a..2413ab524 100644 --- a/pics/crystalsvg/cr16-app-applixware.png +++ b/pics/crystalsvg/cr16-app-applixware.png diff --git a/pics/crystalsvg/cr16-app-assistant.png b/pics/crystalsvg/cr16-app-assistant.png Binary files differindex 2e68ba50f..c1730a25b 100644 --- a/pics/crystalsvg/cr16-app-assistant.png +++ b/pics/crystalsvg/cr16-app-assistant.png diff --git a/pics/crystalsvg/cr16-app-blender.png b/pics/crystalsvg/cr16-app-blender.png Binary files differindex 710e2af86..608f2d661 100644 --- a/pics/crystalsvg/cr16-app-blender.png +++ b/pics/crystalsvg/cr16-app-blender.png diff --git a/pics/crystalsvg/cr16-app-bluefish.png b/pics/crystalsvg/cr16-app-bluefish.png Binary files differindex c51892e5f..660cb01f5 100644 --- a/pics/crystalsvg/cr16-app-bluefish.png +++ b/pics/crystalsvg/cr16-app-bluefish.png diff --git a/pics/crystalsvg/cr16-app-clanbomber.png b/pics/crystalsvg/cr16-app-clanbomber.png Binary files differindex 3b64d4651..c1c32e38b 100644 --- a/pics/crystalsvg/cr16-app-clanbomber.png +++ b/pics/crystalsvg/cr16-app-clanbomber.png diff --git a/pics/crystalsvg/cr16-app-designer.png b/pics/crystalsvg/cr16-app-designer.png Binary files differindex ff3f99bd1..f01f6fed0 100644 --- a/pics/crystalsvg/cr16-app-designer.png +++ b/pics/crystalsvg/cr16-app-designer.png diff --git a/pics/crystalsvg/cr16-app-dia.png b/pics/crystalsvg/cr16-app-dia.png Binary files differindex 1a231ef33..6f99c665e 100644 --- a/pics/crystalsvg/cr16-app-dia.png +++ b/pics/crystalsvg/cr16-app-dia.png diff --git a/pics/crystalsvg/cr16-app-dlgedit.png b/pics/crystalsvg/cr16-app-dlgedit.png Binary files differindex d19b0e1b6..2eee02783 100644 --- a/pics/crystalsvg/cr16-app-dlgedit.png +++ b/pics/crystalsvg/cr16-app-dlgedit.png diff --git a/pics/crystalsvg/cr16-app-eclipse.png b/pics/crystalsvg/cr16-app-eclipse.png Binary files differindex 55e428ae1..eb17b76f2 100644 --- a/pics/crystalsvg/cr16-app-eclipse.png +++ b/pics/crystalsvg/cr16-app-eclipse.png diff --git a/pics/crystalsvg/cr16-app-edu_languages.png b/pics/crystalsvg/cr16-app-edu_languages.png Binary files differindex 16b0de147..a8ec19da5 100644 --- a/pics/crystalsvg/cr16-app-edu_languages.png +++ b/pics/crystalsvg/cr16-app-edu_languages.png diff --git a/pics/crystalsvg/cr16-app-edu_mathematics.png b/pics/crystalsvg/cr16-app-edu_mathematics.png Binary files differindex 7d26d9937..394e23a79 100644 --- a/pics/crystalsvg/cr16-app-edu_mathematics.png +++ b/pics/crystalsvg/cr16-app-edu_mathematics.png diff --git a/pics/crystalsvg/cr16-app-edu_miscellaneous.png b/pics/crystalsvg/cr16-app-edu_miscellaneous.png Binary files differindex 619a1b110..2d9a5438d 100644 --- a/pics/crystalsvg/cr16-app-edu_miscellaneous.png +++ b/pics/crystalsvg/cr16-app-edu_miscellaneous.png diff --git a/pics/crystalsvg/cr16-app-emacs.png b/pics/crystalsvg/cr16-app-emacs.png Binary files differindex c86092f50..3cd1323be 100644 --- a/pics/crystalsvg/cr16-app-emacs.png +++ b/pics/crystalsvg/cr16-app-emacs.png diff --git a/pics/crystalsvg/cr16-app-email.png b/pics/crystalsvg/cr16-app-email.png Binary files differindex 45f313f07..c1a8cea0e 100644 --- a/pics/crystalsvg/cr16-app-email.png +++ b/pics/crystalsvg/cr16-app-email.png diff --git a/pics/crystalsvg/cr16-app-evolution.png b/pics/crystalsvg/cr16-app-evolution.png Binary files differindex 99b1d6e72..428dba5a9 100644 --- a/pics/crystalsvg/cr16-app-evolution.png +++ b/pics/crystalsvg/cr16-app-evolution.png diff --git a/pics/crystalsvg/cr16-app-fifteenpieces.png b/pics/crystalsvg/cr16-app-fifteenpieces.png Binary files differindex 8b9e0338c..76b8e89eb 100644 --- a/pics/crystalsvg/cr16-app-fifteenpieces.png +++ b/pics/crystalsvg/cr16-app-fifteenpieces.png diff --git a/pics/crystalsvg/cr16-app-gabber.png b/pics/crystalsvg/cr16-app-gabber.png Binary files differindex 99a32c715..82f2b868d 100644 --- a/pics/crystalsvg/cr16-app-gabber.png +++ b/pics/crystalsvg/cr16-app-gabber.png diff --git a/pics/crystalsvg/cr16-app-gaim.png b/pics/crystalsvg/cr16-app-gaim.png Binary files differindex 8b98076ba..aea028fdf 100644 --- a/pics/crystalsvg/cr16-app-gaim.png +++ b/pics/crystalsvg/cr16-app-gaim.png diff --git a/pics/crystalsvg/cr16-app-gimp.png b/pics/crystalsvg/cr16-app-gimp.png Binary files differindex f2d02ecd0..13d9850a5 100644 --- a/pics/crystalsvg/cr16-app-gimp.png +++ b/pics/crystalsvg/cr16-app-gimp.png diff --git a/pics/crystalsvg/cr16-app-gnome_apps.png b/pics/crystalsvg/cr16-app-gnome_apps.png Binary files differindex 1edc2381c..a0145cac8 100644 --- a/pics/crystalsvg/cr16-app-gnome_apps.png +++ b/pics/crystalsvg/cr16-app-gnome_apps.png diff --git a/pics/crystalsvg/cr16-app-gnomemeeting.png b/pics/crystalsvg/cr16-app-gnomemeeting.png Binary files differindex 11a31e9ef..bdd1f76a7 100644 --- a/pics/crystalsvg/cr16-app-gnomemeeting.png +++ b/pics/crystalsvg/cr16-app-gnomemeeting.png diff --git a/pics/crystalsvg/cr16-app-gnucash.png b/pics/crystalsvg/cr16-app-gnucash.png Binary files differindex f2a11f070..4b30664cf 100644 --- a/pics/crystalsvg/cr16-app-gnucash.png +++ b/pics/crystalsvg/cr16-app-gnucash.png diff --git a/pics/crystalsvg/cr16-app-gnumeric.png b/pics/crystalsvg/cr16-app-gnumeric.png Binary files differindex 816db283f..0ddf8c73a 100644 --- a/pics/crystalsvg/cr16-app-gnumeric.png +++ b/pics/crystalsvg/cr16-app-gnumeric.png diff --git a/pics/crystalsvg/cr16-app-gv.png b/pics/crystalsvg/cr16-app-gv.png Binary files differindex f21b3abfc..b879ae36a 100644 --- a/pics/crystalsvg/cr16-app-gv.png +++ b/pics/crystalsvg/cr16-app-gv.png diff --git a/pics/crystalsvg/cr16-app-gvim.png b/pics/crystalsvg/cr16-app-gvim.png Binary files differindex b0859d663..48dd18fb5 100644 --- a/pics/crystalsvg/cr16-app-gvim.png +++ b/pics/crystalsvg/cr16-app-gvim.png diff --git a/pics/crystalsvg/cr16-app-kbinaryclock.png b/pics/crystalsvg/cr16-app-kbinaryclock.png Binary files differindex 2a3b4b78a..3a1323013 100644 --- a/pics/crystalsvg/cr16-app-kbinaryclock.png +++ b/pics/crystalsvg/cr16-app-kbinaryclock.png diff --git a/pics/crystalsvg/cr16-app-kfm_home.png b/pics/crystalsvg/cr16-app-kfm_home.png Binary files differindex 3d26af552..d10c2805b 100644 --- a/pics/crystalsvg/cr16-app-kfm_home.png +++ b/pics/crystalsvg/cr16-app-kfm_home.png diff --git a/pics/crystalsvg/cr16-app-kvirc.png b/pics/crystalsvg/cr16-app-kvirc.png Binary files differindex a710376f2..c131c95f1 100644 --- a/pics/crystalsvg/cr16-app-kvirc.png +++ b/pics/crystalsvg/cr16-app-kvirc.png diff --git a/pics/crystalsvg/cr16-app-licq.png b/pics/crystalsvg/cr16-app-licq.png Binary files differindex bd386e6c5..69d477ab5 100644 --- a/pics/crystalsvg/cr16-app-licq.png +++ b/pics/crystalsvg/cr16-app-licq.png diff --git a/pics/crystalsvg/cr16-app-linguist.png b/pics/crystalsvg/cr16-app-linguist.png Binary files differindex 90ac6bf8f..e5d415022 100644 --- a/pics/crystalsvg/cr16-app-linguist.png +++ b/pics/crystalsvg/cr16-app-linguist.png diff --git a/pics/crystalsvg/cr16-app-linuxconf.png b/pics/crystalsvg/cr16-app-linuxconf.png Binary files differindex e71918693..e9c5756a8 100644 --- a/pics/crystalsvg/cr16-app-linuxconf.png +++ b/pics/crystalsvg/cr16-app-linuxconf.png diff --git a/pics/crystalsvg/cr16-app-lyx.png b/pics/crystalsvg/cr16-app-lyx.png Binary files differindex 6b575cc1b..8a1090264 100644 --- a/pics/crystalsvg/cr16-app-lyx.png +++ b/pics/crystalsvg/cr16-app-lyx.png diff --git a/pics/crystalsvg/cr16-app-mathematica.png b/pics/crystalsvg/cr16-app-mathematica.png Binary files differindex 702720311..81ee29ebc 100644 --- a/pics/crystalsvg/cr16-app-mathematica.png +++ b/pics/crystalsvg/cr16-app-mathematica.png diff --git a/pics/crystalsvg/cr16-app-nedit.png b/pics/crystalsvg/cr16-app-nedit.png Binary files differindex dca0c69df..09c1232e4 100644 --- a/pics/crystalsvg/cr16-app-nedit.png +++ b/pics/crystalsvg/cr16-app-nedit.png diff --git a/pics/crystalsvg/cr16-app-netscape.png b/pics/crystalsvg/cr16-app-netscape.png Binary files differindex 3b1aa91cc..50bb95250 100644 --- a/pics/crystalsvg/cr16-app-netscape.png +++ b/pics/crystalsvg/cr16-app-netscape.png diff --git a/pics/crystalsvg/cr16-app-opera.png b/pics/crystalsvg/cr16-app-opera.png Binary files differindex 4694c2bca..16b6280b5 100644 --- a/pics/crystalsvg/cr16-app-opera.png +++ b/pics/crystalsvg/cr16-app-opera.png diff --git a/pics/crystalsvg/cr16-app-package.png b/pics/crystalsvg/cr16-app-package.png Binary files differindex d85d33956..5a363f95b 100644 --- a/pics/crystalsvg/cr16-app-package.png +++ b/pics/crystalsvg/cr16-app-package.png diff --git a/pics/crystalsvg/cr16-app-package_application.png b/pics/crystalsvg/cr16-app-package_application.png Binary files differindex 929f66474..c5dd1f976 100644 --- a/pics/crystalsvg/cr16-app-package_application.png +++ b/pics/crystalsvg/cr16-app-package_application.png diff --git a/pics/crystalsvg/cr16-app-package_applications.png b/pics/crystalsvg/cr16-app-package_applications.png Binary files differindex dd6de2f62..ca736b7e0 100644 --- a/pics/crystalsvg/cr16-app-package_applications.png +++ b/pics/crystalsvg/cr16-app-package_applications.png diff --git a/pics/crystalsvg/cr16-app-package_editors.png b/pics/crystalsvg/cr16-app-package_editors.png Binary files differindex 47d39deb9..2c1deb1da 100644 --- a/pics/crystalsvg/cr16-app-package_editors.png +++ b/pics/crystalsvg/cr16-app-package_editors.png diff --git a/pics/crystalsvg/cr16-app-package_edutainment.png b/pics/crystalsvg/cr16-app-package_edutainment.png Binary files differindex 8e4b0e992..1a5a094d5 100644 --- a/pics/crystalsvg/cr16-app-package_edutainment.png +++ b/pics/crystalsvg/cr16-app-package_edutainment.png diff --git a/pics/crystalsvg/cr16-app-package_favourite.png b/pics/crystalsvg/cr16-app-package_favourite.png Binary files differindex f5351479c..6e10008b2 100644 --- a/pics/crystalsvg/cr16-app-package_favourite.png +++ b/pics/crystalsvg/cr16-app-package_favourite.png diff --git a/pics/crystalsvg/cr16-app-package_games_arcade.png b/pics/crystalsvg/cr16-app-package_games_arcade.png Binary files differindex cd0b07d62..9f84d6847 100644 --- a/pics/crystalsvg/cr16-app-package_games_arcade.png +++ b/pics/crystalsvg/cr16-app-package_games_arcade.png diff --git a/pics/crystalsvg/cr16-app-package_games_board.png b/pics/crystalsvg/cr16-app-package_games_board.png Binary files differindex cc3a781e4..3e38df36c 100644 --- a/pics/crystalsvg/cr16-app-package_games_board.png +++ b/pics/crystalsvg/cr16-app-package_games_board.png diff --git a/pics/crystalsvg/cr16-app-package_games_card.png b/pics/crystalsvg/cr16-app-package_games_card.png Binary files differindex 09fa37e38..95d1274e5 100644 --- a/pics/crystalsvg/cr16-app-package_games_card.png +++ b/pics/crystalsvg/cr16-app-package_games_card.png diff --git a/pics/crystalsvg/cr16-app-package_games_kids.png b/pics/crystalsvg/cr16-app-package_games_kids.png Binary files differindex 1ee436cc7..3c768a350 100644 --- a/pics/crystalsvg/cr16-app-package_games_kids.png +++ b/pics/crystalsvg/cr16-app-package_games_kids.png diff --git a/pics/crystalsvg/cr16-app-package_games_strategy.png b/pics/crystalsvg/cr16-app-package_games_strategy.png Binary files differindex 7765f7459..aaafd3d83 100644 --- a/pics/crystalsvg/cr16-app-package_games_strategy.png +++ b/pics/crystalsvg/cr16-app-package_games_strategy.png diff --git a/pics/crystalsvg/cr16-app-package_settings.png b/pics/crystalsvg/cr16-app-package_settings.png Binary files differindex 8bc9a0faf..06e060a5f 100644 --- a/pics/crystalsvg/cr16-app-package_settings.png +++ b/pics/crystalsvg/cr16-app-package_settings.png diff --git a/pics/crystalsvg/cr16-app-package_system.png b/pics/crystalsvg/cr16-app-package_system.png Binary files differindex b97bfb434..b41c29633 100644 --- a/pics/crystalsvg/cr16-app-package_system.png +++ b/pics/crystalsvg/cr16-app-package_system.png diff --git a/pics/crystalsvg/cr16-app-package_toys.png b/pics/crystalsvg/cr16-app-package_toys.png Binary files differindex a2ad6b83d..d5b924e90 100644 --- a/pics/crystalsvg/cr16-app-package_toys.png +++ b/pics/crystalsvg/cr16-app-package_toys.png diff --git a/pics/crystalsvg/cr16-app-pan.png b/pics/crystalsvg/cr16-app-pan.png Binary files differindex 2b7eb5d77..810e4b4fd 100644 --- a/pics/crystalsvg/cr16-app-pan.png +++ b/pics/crystalsvg/cr16-app-pan.png diff --git a/pics/crystalsvg/cr16-app-penguin.png b/pics/crystalsvg/cr16-app-penguin.png Binary files differindex a99e61179..3c25e564c 100644 --- a/pics/crystalsvg/cr16-app-penguin.png +++ b/pics/crystalsvg/cr16-app-penguin.png diff --git a/pics/crystalsvg/cr16-app-phppg.png b/pics/crystalsvg/cr16-app-phppg.png Binary files differindex 63d0802c7..61ec70b99 100644 --- a/pics/crystalsvg/cr16-app-phppg.png +++ b/pics/crystalsvg/cr16-app-phppg.png diff --git a/pics/crystalsvg/cr16-app-plan.png b/pics/crystalsvg/cr16-app-plan.png Binary files differindex f761f2c92..a210d8f62 100644 --- a/pics/crystalsvg/cr16-app-plan.png +++ b/pics/crystalsvg/cr16-app-plan.png diff --git a/pics/crystalsvg/cr16-app-planner.png b/pics/crystalsvg/cr16-app-planner.png Binary files differindex 56c1d74eb..c6303160b 100644 --- a/pics/crystalsvg/cr16-app-planner.png +++ b/pics/crystalsvg/cr16-app-planner.png diff --git a/pics/crystalsvg/cr16-app-pybliographic.png b/pics/crystalsvg/cr16-app-pybliographic.png Binary files differindex 68eb9e05b..bbe6d21d3 100644 --- a/pics/crystalsvg/cr16-app-pybliographic.png +++ b/pics/crystalsvg/cr16-app-pybliographic.png diff --git a/pics/crystalsvg/cr16-app-randr.png b/pics/crystalsvg/cr16-app-randr.png Binary files differindex 9dd3bf9ca..a6d25c0cd 100644 --- a/pics/crystalsvg/cr16-app-randr.png +++ b/pics/crystalsvg/cr16-app-randr.png diff --git a/pics/crystalsvg/cr16-app-realplayer.png b/pics/crystalsvg/cr16-app-realplayer.png Binary files differindex d29d81d97..4e2adfb36 100644 --- a/pics/crystalsvg/cr16-app-realplayer.png +++ b/pics/crystalsvg/cr16-app-realplayer.png diff --git a/pics/crystalsvg/cr16-app-remote.png b/pics/crystalsvg/cr16-app-remote.png Binary files differindex 9de8a241c..168ba051a 100644 --- a/pics/crystalsvg/cr16-app-remote.png +++ b/pics/crystalsvg/cr16-app-remote.png diff --git a/pics/crystalsvg/cr16-app-runprocesscatcher.png b/pics/crystalsvg/cr16-app-runprocesscatcher.png Binary files differindex 4553e305a..34488352b 100644 --- a/pics/crystalsvg/cr16-app-runprocesscatcher.png +++ b/pics/crystalsvg/cr16-app-runprocesscatcher.png diff --git a/pics/crystalsvg/cr16-app-scribus.png b/pics/crystalsvg/cr16-app-scribus.png Binary files differindex efc9460b2..61b4b108d 100644 --- a/pics/crystalsvg/cr16-app-scribus.png +++ b/pics/crystalsvg/cr16-app-scribus.png diff --git a/pics/crystalsvg/cr16-app-sodipodi.png b/pics/crystalsvg/cr16-app-sodipodi.png Binary files differindex 31b522a42..495d622a1 100644 --- a/pics/crystalsvg/cr16-app-sodipodi.png +++ b/pics/crystalsvg/cr16-app-sodipodi.png diff --git a/pics/crystalsvg/cr16-app-systemtray.png b/pics/crystalsvg/cr16-app-systemtray.png Binary files differindex e46643064..e35ff2ee9 100644 --- a/pics/crystalsvg/cr16-app-systemtray.png +++ b/pics/crystalsvg/cr16-app-systemtray.png diff --git a/pics/crystalsvg/cr16-app-terminal.png b/pics/crystalsvg/cr16-app-terminal.png Binary files differindex 75fa314a7..be95c6150 100644 --- a/pics/crystalsvg/cr16-app-terminal.png +++ b/pics/crystalsvg/cr16-app-terminal.png diff --git a/pics/crystalsvg/cr16-app-tux.png b/pics/crystalsvg/cr16-app-tux.png Binary files differindex db2e8b7bb..9a3c96146 100644 --- a/pics/crystalsvg/cr16-app-tux.png +++ b/pics/crystalsvg/cr16-app-tux.png diff --git a/pics/crystalsvg/cr16-app-vnc.png b/pics/crystalsvg/cr16-app-vnc.png Binary files differindex 4c4e7e429..65f8af4ee 100644 --- a/pics/crystalsvg/cr16-app-vnc.png +++ b/pics/crystalsvg/cr16-app-vnc.png diff --git a/pics/crystalsvg/cr16-app-wabi.png b/pics/crystalsvg/cr16-app-wabi.png Binary files differindex c22b0e24c..827592c1a 100644 --- a/pics/crystalsvg/cr16-app-wabi.png +++ b/pics/crystalsvg/cr16-app-wabi.png diff --git a/pics/crystalsvg/cr16-app-wine.png b/pics/crystalsvg/cr16-app-wine.png Binary files differindex e30dabd1a..87c37d171 100644 --- a/pics/crystalsvg/cr16-app-wine.png +++ b/pics/crystalsvg/cr16-app-wine.png diff --git a/pics/crystalsvg/cr16-app-wp.png b/pics/crystalsvg/cr16-app-wp.png Binary files differindex 6362c7fbc..79e572727 100644 --- a/pics/crystalsvg/cr16-app-wp.png +++ b/pics/crystalsvg/cr16-app-wp.png diff --git a/pics/crystalsvg/cr16-app-xcalc.png b/pics/crystalsvg/cr16-app-xcalc.png Binary files differindex adb921875..9e8ef2ad4 100644 --- a/pics/crystalsvg/cr16-app-xcalc.png +++ b/pics/crystalsvg/cr16-app-xcalc.png diff --git a/pics/crystalsvg/cr16-app-xchat.png b/pics/crystalsvg/cr16-app-xchat.png Binary files differindex a23a71152..3a1b940b0 100644 --- a/pics/crystalsvg/cr16-app-xchat.png +++ b/pics/crystalsvg/cr16-app-xchat.png diff --git a/pics/crystalsvg/cr16-app-xclipboard.png b/pics/crystalsvg/cr16-app-xclipboard.png Binary files differindex de99fd7c6..d3a0dcbde 100644 --- a/pics/crystalsvg/cr16-app-xclipboard.png +++ b/pics/crystalsvg/cr16-app-xclipboard.png diff --git a/pics/crystalsvg/cr16-app-xclock.png b/pics/crystalsvg/cr16-app-xclock.png Binary files differindex 9b32a31a8..292c88ac5 100644 --- a/pics/crystalsvg/cr16-app-xclock.png +++ b/pics/crystalsvg/cr16-app-xclock.png diff --git a/pics/crystalsvg/cr16-app-xconsole.png b/pics/crystalsvg/cr16-app-xconsole.png Binary files differindex bc128c0a4..d824b0ae3 100644 --- a/pics/crystalsvg/cr16-app-xconsole.png +++ b/pics/crystalsvg/cr16-app-xconsole.png diff --git a/pics/crystalsvg/cr16-app-xedit.png b/pics/crystalsvg/cr16-app-xedit.png Binary files differindex 8a03b6dc5..92c0493ef 100644 --- a/pics/crystalsvg/cr16-app-xedit.png +++ b/pics/crystalsvg/cr16-app-xedit.png diff --git a/pics/crystalsvg/cr16-app-xemacs.png b/pics/crystalsvg/cr16-app-xemacs.png Binary files differindex 24ec2d707..94e2c7755 100644 --- a/pics/crystalsvg/cr16-app-xemacs.png +++ b/pics/crystalsvg/cr16-app-xemacs.png diff --git a/pics/crystalsvg/cr16-app-xeyes.png b/pics/crystalsvg/cr16-app-xeyes.png Binary files differindex 20d06b2fe..4b6f7e7fd 100644 --- a/pics/crystalsvg/cr16-app-xeyes.png +++ b/pics/crystalsvg/cr16-app-xeyes.png diff --git a/pics/crystalsvg/cr16-app-xfig.png b/pics/crystalsvg/cr16-app-xfig.png Binary files differindex 48f00f631..1d0c0840b 100644 --- a/pics/crystalsvg/cr16-app-xfig.png +++ b/pics/crystalsvg/cr16-app-xfig.png diff --git a/pics/crystalsvg/cr16-app-xfmail.png b/pics/crystalsvg/cr16-app-xfmail.png Binary files differindex 4d8068466..61c32bacd 100644 --- a/pics/crystalsvg/cr16-app-xfmail.png +++ b/pics/crystalsvg/cr16-app-xfmail.png diff --git a/pics/crystalsvg/cr16-app-xload.png b/pics/crystalsvg/cr16-app-xload.png Binary files differindex 638df5dfa..030e98b32 100644 --- a/pics/crystalsvg/cr16-app-xload.png +++ b/pics/crystalsvg/cr16-app-xload.png diff --git a/pics/crystalsvg/cr16-app-xmag.png b/pics/crystalsvg/cr16-app-xmag.png Binary files differindex 5cf09b774..c7b8abe22 100644 --- a/pics/crystalsvg/cr16-app-xmag.png +++ b/pics/crystalsvg/cr16-app-xmag.png diff --git a/pics/crystalsvg/cr16-app-xmms.png b/pics/crystalsvg/cr16-app-xmms.png Binary files differindex f48b7dee4..a8c713ea4 100644 --- a/pics/crystalsvg/cr16-app-xmms.png +++ b/pics/crystalsvg/cr16-app-xmms.png diff --git a/pics/crystalsvg/cr16-app-xosview.png b/pics/crystalsvg/cr16-app-xosview.png Binary files differindex 2034b69ec..156e3cf9d 100644 --- a/pics/crystalsvg/cr16-app-xosview.png +++ b/pics/crystalsvg/cr16-app-xosview.png diff --git a/pics/crystalsvg/cr16-app-xpaint.png b/pics/crystalsvg/cr16-app-xpaint.png Binary files differindex 1d0ce977e..b01e77430 100644 --- a/pics/crystalsvg/cr16-app-xpaint.png +++ b/pics/crystalsvg/cr16-app-xpaint.png diff --git a/pics/crystalsvg/cr16-app-xv.png b/pics/crystalsvg/cr16-app-xv.png Binary files differindex d7bbe29a4..108a64d5b 100644 --- a/pics/crystalsvg/cr16-app-xv.png +++ b/pics/crystalsvg/cr16-app-xv.png diff --git a/pics/crystalsvg/cr16-category-applications-development.png b/pics/crystalsvg/cr16-category-applications-development.png Binary files differindex 17d48694d..7f0e05255 100644 --- a/pics/crystalsvg/cr16-category-applications-development.png +++ b/pics/crystalsvg/cr16-category-applications-development.png diff --git a/pics/crystalsvg/cr16-category-applications-games.png b/pics/crystalsvg/cr16-category-applications-games.png Binary files differindex 61dcedc5e..84dea14e8 100644 --- a/pics/crystalsvg/cr16-category-applications-games.png +++ b/pics/crystalsvg/cr16-category-applications-games.png diff --git a/pics/crystalsvg/cr16-category-applications-graphics.png b/pics/crystalsvg/cr16-category-applications-graphics.png Binary files differindex 79b1d8877..a85d007d9 100644 --- a/pics/crystalsvg/cr16-category-applications-graphics.png +++ b/pics/crystalsvg/cr16-category-applications-graphics.png diff --git a/pics/crystalsvg/cr16-category-applications-internet.png b/pics/crystalsvg/cr16-category-applications-internet.png Binary files differindex 5acff48dd..9801f62e9 100644 --- a/pics/crystalsvg/cr16-category-applications-internet.png +++ b/pics/crystalsvg/cr16-category-applications-internet.png diff --git a/pics/crystalsvg/cr16-category-applications-multimedia.png b/pics/crystalsvg/cr16-category-applications-multimedia.png Binary files differindex b27588d74..78c590428 100644 --- a/pics/crystalsvg/cr16-category-applications-multimedia.png +++ b/pics/crystalsvg/cr16-category-applications-multimedia.png diff --git a/pics/crystalsvg/cr16-category-applications-office.png b/pics/crystalsvg/cr16-category-applications-office.png Binary files differindex e2ed6b17b..161192e84 100644 --- a/pics/crystalsvg/cr16-category-applications-office.png +++ b/pics/crystalsvg/cr16-category-applications-office.png diff --git a/pics/crystalsvg/cr16-category-applications-science.png b/pics/crystalsvg/cr16-category-applications-science.png Binary files differindex e954b71e7..1c021acf8 100644 --- a/pics/crystalsvg/cr16-category-applications-science.png +++ b/pics/crystalsvg/cr16-category-applications-science.png diff --git a/pics/crystalsvg/cr16-category-applications-utilities.png b/pics/crystalsvg/cr16-category-applications-utilities.png Binary files differindex 41709f8b7..56e0dfd61 100644 --- a/pics/crystalsvg/cr16-category-applications-utilities.png +++ b/pics/crystalsvg/cr16-category-applications-utilities.png diff --git a/pics/crystalsvg/cr22-app-email.png b/pics/crystalsvg/cr22-app-email.png Binary files differindex 2badba2c3..f5ae53319 100644 --- a/pics/crystalsvg/cr22-app-email.png +++ b/pics/crystalsvg/cr22-app-email.png diff --git a/pics/crystalsvg/cr22-app-fifteenpieces.png b/pics/crystalsvg/cr22-app-fifteenpieces.png Binary files differindex 5e349d8f5..4b7ecf4f6 100644 --- a/pics/crystalsvg/cr22-app-fifteenpieces.png +++ b/pics/crystalsvg/cr22-app-fifteenpieces.png diff --git a/pics/crystalsvg/cr22-app-kbinaryclock.png b/pics/crystalsvg/cr22-app-kbinaryclock.png Binary files differindex b9c029073..3d29af426 100644 --- a/pics/crystalsvg/cr22-app-kbinaryclock.png +++ b/pics/crystalsvg/cr22-app-kbinaryclock.png diff --git a/pics/crystalsvg/cr22-app-kvirc.png b/pics/crystalsvg/cr22-app-kvirc.png Binary files differindex d5be8ff26..602d18883 100644 --- a/pics/crystalsvg/cr22-app-kvirc.png +++ b/pics/crystalsvg/cr22-app-kvirc.png diff --git a/pics/crystalsvg/cr22-app-nedit.png b/pics/crystalsvg/cr22-app-nedit.png Binary files differindex 9a68562eb..92962ac15 100644 --- a/pics/crystalsvg/cr22-app-nedit.png +++ b/pics/crystalsvg/cr22-app-nedit.png diff --git a/pics/crystalsvg/cr22-app-randr.png b/pics/crystalsvg/cr22-app-randr.png Binary files differindex 4552c512b..e398e0bb5 100644 --- a/pics/crystalsvg/cr22-app-randr.png +++ b/pics/crystalsvg/cr22-app-randr.png diff --git a/pics/crystalsvg/cr22-app-runprocesscatcher.png b/pics/crystalsvg/cr22-app-runprocesscatcher.png Binary files differindex 1088baff5..33f0f5f9f 100644 --- a/pics/crystalsvg/cr22-app-runprocesscatcher.png +++ b/pics/crystalsvg/cr22-app-runprocesscatcher.png diff --git a/pics/crystalsvg/cr22-app-systemtray.png b/pics/crystalsvg/cr22-app-systemtray.png Binary files differindex e4d5f5558..b2e1d235d 100644 --- a/pics/crystalsvg/cr22-app-systemtray.png +++ b/pics/crystalsvg/cr22-app-systemtray.png diff --git a/pics/crystalsvg/cr22-app-taskbar.png b/pics/crystalsvg/cr22-app-taskbar.png Binary files differindex ec3006cf6..6daaac53a 100644 --- a/pics/crystalsvg/cr22-app-taskbar.png +++ b/pics/crystalsvg/cr22-app-taskbar.png diff --git a/pics/crystalsvg/cr22-category-applications-development.png b/pics/crystalsvg/cr22-category-applications-development.png Binary files differindex 0b641027d..57fbb7c9b 100644 --- a/pics/crystalsvg/cr22-category-applications-development.png +++ b/pics/crystalsvg/cr22-category-applications-development.png diff --git a/pics/crystalsvg/cr32-app-abiword.png b/pics/crystalsvg/cr32-app-abiword.png Binary files differindex b18e136dd..639439a09 100644 --- a/pics/crystalsvg/cr32-app-abiword.png +++ b/pics/crystalsvg/cr32-app-abiword.png diff --git a/pics/crystalsvg/cr32-app-acroread.png b/pics/crystalsvg/cr32-app-acroread.png Binary files differindex 9b36995d6..7e3e8900d 100644 --- a/pics/crystalsvg/cr32-app-acroread.png +++ b/pics/crystalsvg/cr32-app-acroread.png diff --git a/pics/crystalsvg/cr32-app-alevt.png b/pics/crystalsvg/cr32-app-alevt.png Binary files differindex 892def18c..a3fb981a6 100644 --- a/pics/crystalsvg/cr32-app-alevt.png +++ b/pics/crystalsvg/cr32-app-alevt.png diff --git a/pics/crystalsvg/cr32-app-applixware.png b/pics/crystalsvg/cr32-app-applixware.png Binary files differindex 4a625f3c1..d3b9b873f 100644 --- a/pics/crystalsvg/cr32-app-applixware.png +++ b/pics/crystalsvg/cr32-app-applixware.png diff --git a/pics/crystalsvg/cr32-app-blender.png b/pics/crystalsvg/cr32-app-blender.png Binary files differindex 1d4cdd013..a9362a92e 100644 --- a/pics/crystalsvg/cr32-app-blender.png +++ b/pics/crystalsvg/cr32-app-blender.png diff --git a/pics/crystalsvg/cr32-app-bluefish.png b/pics/crystalsvg/cr32-app-bluefish.png Binary files differindex 845f196de..2cfb880a8 100644 --- a/pics/crystalsvg/cr32-app-bluefish.png +++ b/pics/crystalsvg/cr32-app-bluefish.png diff --git a/pics/crystalsvg/cr32-app-clanbomber.png b/pics/crystalsvg/cr32-app-clanbomber.png Binary files differindex c47444a86..0dfea7ae8 100644 --- a/pics/crystalsvg/cr32-app-clanbomber.png +++ b/pics/crystalsvg/cr32-app-clanbomber.png diff --git a/pics/crystalsvg/cr32-app-designer.png b/pics/crystalsvg/cr32-app-designer.png Binary files differindex 3f6fa7a10..ce807175a 100644 --- a/pics/crystalsvg/cr32-app-designer.png +++ b/pics/crystalsvg/cr32-app-designer.png diff --git a/pics/crystalsvg/cr32-app-dia.png b/pics/crystalsvg/cr32-app-dia.png Binary files differindex 12277c70f..447bc8ac6 100644 --- a/pics/crystalsvg/cr32-app-dia.png +++ b/pics/crystalsvg/cr32-app-dia.png diff --git a/pics/crystalsvg/cr32-app-dlgedit.png b/pics/crystalsvg/cr32-app-dlgedit.png Binary files differindex 55ff5268d..fbd2ef1e8 100644 --- a/pics/crystalsvg/cr32-app-dlgedit.png +++ b/pics/crystalsvg/cr32-app-dlgedit.png diff --git a/pics/crystalsvg/cr32-app-eclipse.png b/pics/crystalsvg/cr32-app-eclipse.png Binary files differindex ad214a283..f17edc48b 100644 --- a/pics/crystalsvg/cr32-app-eclipse.png +++ b/pics/crystalsvg/cr32-app-eclipse.png diff --git a/pics/crystalsvg/cr32-app-edu_languages.png b/pics/crystalsvg/cr32-app-edu_languages.png Binary files differindex 616d9c6c1..e83da5b97 100644 --- a/pics/crystalsvg/cr32-app-edu_languages.png +++ b/pics/crystalsvg/cr32-app-edu_languages.png diff --git a/pics/crystalsvg/cr32-app-edu_mathematics.png b/pics/crystalsvg/cr32-app-edu_mathematics.png Binary files differindex 004e5c30f..009b70b2b 100644 --- a/pics/crystalsvg/cr32-app-edu_mathematics.png +++ b/pics/crystalsvg/cr32-app-edu_mathematics.png diff --git a/pics/crystalsvg/cr32-app-edu_miscellaneous.png b/pics/crystalsvg/cr32-app-edu_miscellaneous.png Binary files differindex cb8564230..a99e0566b 100644 --- a/pics/crystalsvg/cr32-app-edu_miscellaneous.png +++ b/pics/crystalsvg/cr32-app-edu_miscellaneous.png diff --git a/pics/crystalsvg/cr32-app-emacs.png b/pics/crystalsvg/cr32-app-emacs.png Binary files differindex b8a9453a6..2c5aae3ea 100644 --- a/pics/crystalsvg/cr32-app-emacs.png +++ b/pics/crystalsvg/cr32-app-emacs.png diff --git a/pics/crystalsvg/cr32-app-email.png b/pics/crystalsvg/cr32-app-email.png Binary files differindex 0ae28269d..ed39eb20d 100644 --- a/pics/crystalsvg/cr32-app-email.png +++ b/pics/crystalsvg/cr32-app-email.png diff --git a/pics/crystalsvg/cr32-app-evolution.png b/pics/crystalsvg/cr32-app-evolution.png Binary files differindex 0310b2fbf..781d46121 100644 --- a/pics/crystalsvg/cr32-app-evolution.png +++ b/pics/crystalsvg/cr32-app-evolution.png diff --git a/pics/crystalsvg/cr32-app-fifteenpieces.png b/pics/crystalsvg/cr32-app-fifteenpieces.png Binary files differindex e36afe078..7703d64e6 100644 --- a/pics/crystalsvg/cr32-app-fifteenpieces.png +++ b/pics/crystalsvg/cr32-app-fifteenpieces.png diff --git a/pics/crystalsvg/cr32-app-gabber.png b/pics/crystalsvg/cr32-app-gabber.png Binary files differindex c097c3f9d..ba124ed22 100644 --- a/pics/crystalsvg/cr32-app-gabber.png +++ b/pics/crystalsvg/cr32-app-gabber.png diff --git a/pics/crystalsvg/cr32-app-gaim.png b/pics/crystalsvg/cr32-app-gaim.png Binary files differindex d8b1d8e0f..edca82921 100644 --- a/pics/crystalsvg/cr32-app-gaim.png +++ b/pics/crystalsvg/cr32-app-gaim.png diff --git a/pics/crystalsvg/cr32-app-galeon.png b/pics/crystalsvg/cr32-app-galeon.png Binary files differindex 440b4c3c4..23c695fdd 100644 --- a/pics/crystalsvg/cr32-app-galeon.png +++ b/pics/crystalsvg/cr32-app-galeon.png diff --git a/pics/crystalsvg/cr32-app-gimp.png b/pics/crystalsvg/cr32-app-gimp.png Binary files differindex c4353fd31..dfa67814b 100644 --- a/pics/crystalsvg/cr32-app-gimp.png +++ b/pics/crystalsvg/cr32-app-gimp.png diff --git a/pics/crystalsvg/cr32-app-gnome_apps.png b/pics/crystalsvg/cr32-app-gnome_apps.png Binary files differindex 6c049d6df..79cb99f3a 100644 --- a/pics/crystalsvg/cr32-app-gnome_apps.png +++ b/pics/crystalsvg/cr32-app-gnome_apps.png diff --git a/pics/crystalsvg/cr32-app-gnomemeeting.png b/pics/crystalsvg/cr32-app-gnomemeeting.png Binary files differindex fdc85d1cc..0c26d023c 100644 --- a/pics/crystalsvg/cr32-app-gnomemeeting.png +++ b/pics/crystalsvg/cr32-app-gnomemeeting.png diff --git a/pics/crystalsvg/cr32-app-gnucash.png b/pics/crystalsvg/cr32-app-gnucash.png Binary files differindex 27af45260..079e66dcb 100644 --- a/pics/crystalsvg/cr32-app-gnucash.png +++ b/pics/crystalsvg/cr32-app-gnucash.png diff --git a/pics/crystalsvg/cr32-app-gnumeric.png b/pics/crystalsvg/cr32-app-gnumeric.png Binary files differindex c932059bf..bb832c7da 100644 --- a/pics/crystalsvg/cr32-app-gnumeric.png +++ b/pics/crystalsvg/cr32-app-gnumeric.png diff --git a/pics/crystalsvg/cr32-app-gv.png b/pics/crystalsvg/cr32-app-gv.png Binary files differindex 13e6e93f7..fbde43b7c 100644 --- a/pics/crystalsvg/cr32-app-gv.png +++ b/pics/crystalsvg/cr32-app-gv.png diff --git a/pics/crystalsvg/cr32-app-gvim.png b/pics/crystalsvg/cr32-app-gvim.png Binary files differindex 961040c57..5291ea2e8 100644 --- a/pics/crystalsvg/cr32-app-gvim.png +++ b/pics/crystalsvg/cr32-app-gvim.png diff --git a/pics/crystalsvg/cr32-app-kbinaryclock.png b/pics/crystalsvg/cr32-app-kbinaryclock.png Binary files differindex efe213798..b8138f316 100644 --- a/pics/crystalsvg/cr32-app-kbinaryclock.png +++ b/pics/crystalsvg/cr32-app-kbinaryclock.png diff --git a/pics/crystalsvg/cr32-app-kfm_home.png b/pics/crystalsvg/cr32-app-kfm_home.png Binary files differindex baa8912e9..26edef228 100644 --- a/pics/crystalsvg/cr32-app-kfm_home.png +++ b/pics/crystalsvg/cr32-app-kfm_home.png diff --git a/pics/crystalsvg/cr32-app-kvirc.png b/pics/crystalsvg/cr32-app-kvirc.png Binary files differindex a64368395..29f51b1f8 100644 --- a/pics/crystalsvg/cr32-app-kvirc.png +++ b/pics/crystalsvg/cr32-app-kvirc.png diff --git a/pics/crystalsvg/cr32-app-licq.png b/pics/crystalsvg/cr32-app-licq.png Binary files differindex ea2cd780f..a2926053e 100644 --- a/pics/crystalsvg/cr32-app-licq.png +++ b/pics/crystalsvg/cr32-app-licq.png diff --git a/pics/crystalsvg/cr32-app-linuxconf.png b/pics/crystalsvg/cr32-app-linuxconf.png Binary files differindex 50372f43f..8b6b63554 100644 --- a/pics/crystalsvg/cr32-app-linuxconf.png +++ b/pics/crystalsvg/cr32-app-linuxconf.png diff --git a/pics/crystalsvg/cr32-app-lyx.png b/pics/crystalsvg/cr32-app-lyx.png Binary files differindex f5cf36e63..a2d8fe2a7 100644 --- a/pics/crystalsvg/cr32-app-lyx.png +++ b/pics/crystalsvg/cr32-app-lyx.png diff --git a/pics/crystalsvg/cr32-app-mathematica.png b/pics/crystalsvg/cr32-app-mathematica.png Binary files differindex 00a41ac93..bd488d098 100644 --- a/pics/crystalsvg/cr32-app-mathematica.png +++ b/pics/crystalsvg/cr32-app-mathematica.png diff --git a/pics/crystalsvg/cr32-app-nedit.png b/pics/crystalsvg/cr32-app-nedit.png Binary files differindex a10490ceb..61c526f8f 100644 --- a/pics/crystalsvg/cr32-app-nedit.png +++ b/pics/crystalsvg/cr32-app-nedit.png diff --git a/pics/crystalsvg/cr32-app-netscape.png b/pics/crystalsvg/cr32-app-netscape.png Binary files differindex 45f419019..bc7998d2f 100644 --- a/pics/crystalsvg/cr32-app-netscape.png +++ b/pics/crystalsvg/cr32-app-netscape.png diff --git a/pics/crystalsvg/cr32-app-opera.png b/pics/crystalsvg/cr32-app-opera.png Binary files differindex 616f3ab6d..0b8c9319b 100644 --- a/pics/crystalsvg/cr32-app-opera.png +++ b/pics/crystalsvg/cr32-app-opera.png diff --git a/pics/crystalsvg/cr32-app-package.png b/pics/crystalsvg/cr32-app-package.png Binary files differindex e13d3d500..d2b8c06ea 100644 --- a/pics/crystalsvg/cr32-app-package.png +++ b/pics/crystalsvg/cr32-app-package.png diff --git a/pics/crystalsvg/cr32-app-package_applications.png b/pics/crystalsvg/cr32-app-package_applications.png Binary files differindex 4d531001c..8283bba3d 100644 --- a/pics/crystalsvg/cr32-app-package_applications.png +++ b/pics/crystalsvg/cr32-app-package_applications.png diff --git a/pics/crystalsvg/cr32-app-package_editors.png b/pics/crystalsvg/cr32-app-package_editors.png Binary files differindex 80785470d..6b5c245f3 100644 --- a/pics/crystalsvg/cr32-app-package_editors.png +++ b/pics/crystalsvg/cr32-app-package_editors.png diff --git a/pics/crystalsvg/cr32-app-package_edutainment.png b/pics/crystalsvg/cr32-app-package_edutainment.png Binary files differindex b0a7fecbe..a99e0566b 100644 --- a/pics/crystalsvg/cr32-app-package_edutainment.png +++ b/pics/crystalsvg/cr32-app-package_edutainment.png diff --git a/pics/crystalsvg/cr32-app-package_favourite.png b/pics/crystalsvg/cr32-app-package_favourite.png Binary files differindex 6e6b784ec..b8f6ad391 100644 --- a/pics/crystalsvg/cr32-app-package_favourite.png +++ b/pics/crystalsvg/cr32-app-package_favourite.png diff --git a/pics/crystalsvg/cr32-app-package_games_arcade.png b/pics/crystalsvg/cr32-app-package_games_arcade.png Binary files differindex 93f56aa97..25fa7b9e0 100644 --- a/pics/crystalsvg/cr32-app-package_games_arcade.png +++ b/pics/crystalsvg/cr32-app-package_games_arcade.png diff --git a/pics/crystalsvg/cr32-app-package_games_board.png b/pics/crystalsvg/cr32-app-package_games_board.png Binary files differindex a3152cfca..6edf25e66 100644 --- a/pics/crystalsvg/cr32-app-package_games_board.png +++ b/pics/crystalsvg/cr32-app-package_games_board.png diff --git a/pics/crystalsvg/cr32-app-package_games_card.png b/pics/crystalsvg/cr32-app-package_games_card.png Binary files differindex bae6de614..850d84e46 100644 --- a/pics/crystalsvg/cr32-app-package_games_card.png +++ b/pics/crystalsvg/cr32-app-package_games_card.png diff --git a/pics/crystalsvg/cr32-app-package_games_kids.png b/pics/crystalsvg/cr32-app-package_games_kids.png Binary files differindex 50ba88eb8..e3beb1081 100644 --- a/pics/crystalsvg/cr32-app-package_games_kids.png +++ b/pics/crystalsvg/cr32-app-package_games_kids.png diff --git a/pics/crystalsvg/cr32-app-package_games_strategy.png b/pics/crystalsvg/cr32-app-package_games_strategy.png Binary files differindex 18b2ded15..3091c69d5 100644 --- a/pics/crystalsvg/cr32-app-package_games_strategy.png +++ b/pics/crystalsvg/cr32-app-package_games_strategy.png diff --git a/pics/crystalsvg/cr32-app-package_settings.png b/pics/crystalsvg/cr32-app-package_settings.png Binary files differindex ddaaeb081..b33849823 100644 --- a/pics/crystalsvg/cr32-app-package_settings.png +++ b/pics/crystalsvg/cr32-app-package_settings.png diff --git a/pics/crystalsvg/cr32-app-package_system.png b/pics/crystalsvg/cr32-app-package_system.png Binary files differindex 726784a4d..80c7fced5 100644 --- a/pics/crystalsvg/cr32-app-package_system.png +++ b/pics/crystalsvg/cr32-app-package_system.png diff --git a/pics/crystalsvg/cr32-app-package_toys.png b/pics/crystalsvg/cr32-app-package_toys.png Binary files differindex 88df4ab8a..e8c6a5217 100644 --- a/pics/crystalsvg/cr32-app-package_toys.png +++ b/pics/crystalsvg/cr32-app-package_toys.png diff --git a/pics/crystalsvg/cr32-app-pan.png b/pics/crystalsvg/cr32-app-pan.png Binary files differindex 231e7d294..d577cb549 100644 --- a/pics/crystalsvg/cr32-app-pan.png +++ b/pics/crystalsvg/cr32-app-pan.png diff --git a/pics/crystalsvg/cr32-app-penguin.png b/pics/crystalsvg/cr32-app-penguin.png Binary files differindex 3d7aa5245..5a971e389 100644 --- a/pics/crystalsvg/cr32-app-penguin.png +++ b/pics/crystalsvg/cr32-app-penguin.png diff --git a/pics/crystalsvg/cr32-app-phppg.png b/pics/crystalsvg/cr32-app-phppg.png Binary files differindex a0e4f474f..568f4d0dc 100644 --- a/pics/crystalsvg/cr32-app-phppg.png +++ b/pics/crystalsvg/cr32-app-phppg.png diff --git a/pics/crystalsvg/cr32-app-pinguin.png b/pics/crystalsvg/cr32-app-pinguin.png Binary files differindex dd6c4d19c..25f6bfb1c 100644 --- a/pics/crystalsvg/cr32-app-pinguin.png +++ b/pics/crystalsvg/cr32-app-pinguin.png diff --git a/pics/crystalsvg/cr32-app-plan.png b/pics/crystalsvg/cr32-app-plan.png Binary files differindex b8d8cbeae..feb2d271d 100644 --- a/pics/crystalsvg/cr32-app-plan.png +++ b/pics/crystalsvg/cr32-app-plan.png diff --git a/pics/crystalsvg/cr32-app-planner.png b/pics/crystalsvg/cr32-app-planner.png Binary files differindex 33155b4b7..89c4d0408 100644 --- a/pics/crystalsvg/cr32-app-planner.png +++ b/pics/crystalsvg/cr32-app-planner.png diff --git a/pics/crystalsvg/cr32-app-pybliographic.png b/pics/crystalsvg/cr32-app-pybliographic.png Binary files differindex 7ab4566ea..5b92d9d00 100644 --- a/pics/crystalsvg/cr32-app-pybliographic.png +++ b/pics/crystalsvg/cr32-app-pybliographic.png diff --git a/pics/crystalsvg/cr32-app-pysol.png b/pics/crystalsvg/cr32-app-pysol.png Binary files differindex a3da14021..2e2ab6f02 100644 --- a/pics/crystalsvg/cr32-app-pysol.png +++ b/pics/crystalsvg/cr32-app-pysol.png diff --git a/pics/crystalsvg/cr32-app-randr.png b/pics/crystalsvg/cr32-app-randr.png Binary files differindex a0646b5c1..26c0248a5 100644 --- a/pics/crystalsvg/cr32-app-randr.png +++ b/pics/crystalsvg/cr32-app-randr.png diff --git a/pics/crystalsvg/cr32-app-realplayer.png b/pics/crystalsvg/cr32-app-realplayer.png Binary files differindex 73ce6512d..0048e03a2 100644 --- a/pics/crystalsvg/cr32-app-realplayer.png +++ b/pics/crystalsvg/cr32-app-realplayer.png diff --git a/pics/crystalsvg/cr32-app-runprocesscatcher.png b/pics/crystalsvg/cr32-app-runprocesscatcher.png Binary files differindex 101162f1b..9e47d36b0 100644 --- a/pics/crystalsvg/cr32-app-runprocesscatcher.png +++ b/pics/crystalsvg/cr32-app-runprocesscatcher.png diff --git a/pics/crystalsvg/cr32-app-scribus.png b/pics/crystalsvg/cr32-app-scribus.png Binary files differindex 03d32ec99..d818cdfa6 100644 --- a/pics/crystalsvg/cr32-app-scribus.png +++ b/pics/crystalsvg/cr32-app-scribus.png diff --git a/pics/crystalsvg/cr32-app-sodipodi.png b/pics/crystalsvg/cr32-app-sodipodi.png Binary files differindex 70cc41646..ac1d01320 100644 --- a/pics/crystalsvg/cr32-app-sodipodi.png +++ b/pics/crystalsvg/cr32-app-sodipodi.png diff --git a/pics/crystalsvg/cr32-app-systemtray.png b/pics/crystalsvg/cr32-app-systemtray.png Binary files differindex 61eabf335..1c4ecc059 100644 --- a/pics/crystalsvg/cr32-app-systemtray.png +++ b/pics/crystalsvg/cr32-app-systemtray.png diff --git a/pics/crystalsvg/cr32-app-taskbar.png b/pics/crystalsvg/cr32-app-taskbar.png Binary files differindex a0d02f568..a8f9e9f3d 100644 --- a/pics/crystalsvg/cr32-app-taskbar.png +++ b/pics/crystalsvg/cr32-app-taskbar.png diff --git a/pics/crystalsvg/cr32-app-terminal.png b/pics/crystalsvg/cr32-app-terminal.png Binary files differindex 50f7c0ed2..e59d06f61 100644 --- a/pics/crystalsvg/cr32-app-terminal.png +++ b/pics/crystalsvg/cr32-app-terminal.png diff --git a/pics/crystalsvg/cr32-app-tux.png b/pics/crystalsvg/cr32-app-tux.png Binary files differindex c0c562ed8..dfccb05b3 100644 --- a/pics/crystalsvg/cr32-app-tux.png +++ b/pics/crystalsvg/cr32-app-tux.png diff --git a/pics/crystalsvg/cr32-app-vnc.png b/pics/crystalsvg/cr32-app-vnc.png Binary files differindex 11640324d..a735aedfd 100644 --- a/pics/crystalsvg/cr32-app-vnc.png +++ b/pics/crystalsvg/cr32-app-vnc.png diff --git a/pics/crystalsvg/cr32-app-wabi.png b/pics/crystalsvg/cr32-app-wabi.png Binary files differindex a861ede1d..87de93263 100644 --- a/pics/crystalsvg/cr32-app-wabi.png +++ b/pics/crystalsvg/cr32-app-wabi.png diff --git a/pics/crystalsvg/cr32-app-wine.png b/pics/crystalsvg/cr32-app-wine.png Binary files differindex 2eb7eed55..1bf146eed 100644 --- a/pics/crystalsvg/cr32-app-wine.png +++ b/pics/crystalsvg/cr32-app-wine.png diff --git a/pics/crystalsvg/cr32-app-wp.png b/pics/crystalsvg/cr32-app-wp.png Binary files differindex 89cd2c74c..5d21d8390 100644 --- a/pics/crystalsvg/cr32-app-wp.png +++ b/pics/crystalsvg/cr32-app-wp.png diff --git a/pics/crystalsvg/cr32-app-x.png b/pics/crystalsvg/cr32-app-x.png Binary files differindex 8f83edf83..755937213 100644 --- a/pics/crystalsvg/cr32-app-x.png +++ b/pics/crystalsvg/cr32-app-x.png diff --git a/pics/crystalsvg/cr32-app-xapp.png b/pics/crystalsvg/cr32-app-xapp.png Binary files differindex 7643ef37b..7c78869b6 100644 --- a/pics/crystalsvg/cr32-app-xapp.png +++ b/pics/crystalsvg/cr32-app-xapp.png diff --git a/pics/crystalsvg/cr32-app-xawtv.png b/pics/crystalsvg/cr32-app-xawtv.png Binary files differindex a4b2cab5d..a91d7fc89 100644 --- a/pics/crystalsvg/cr32-app-xawtv.png +++ b/pics/crystalsvg/cr32-app-xawtv.png diff --git a/pics/crystalsvg/cr32-app-xcalc.png b/pics/crystalsvg/cr32-app-xcalc.png Binary files differindex 0ee78d29a..420e7349b 100644 --- a/pics/crystalsvg/cr32-app-xcalc.png +++ b/pics/crystalsvg/cr32-app-xcalc.png diff --git a/pics/crystalsvg/cr32-app-xchat.png b/pics/crystalsvg/cr32-app-xchat.png Binary files differindex 42dd6e0ee..5ed2b1abb 100644 --- a/pics/crystalsvg/cr32-app-xchat.png +++ b/pics/crystalsvg/cr32-app-xchat.png diff --git a/pics/crystalsvg/cr32-app-xclipboard.png b/pics/crystalsvg/cr32-app-xclipboard.png Binary files differindex 4b770546e..5ec8a96f0 100644 --- a/pics/crystalsvg/cr32-app-xclipboard.png +++ b/pics/crystalsvg/cr32-app-xclipboard.png diff --git a/pics/crystalsvg/cr32-app-xclock.png b/pics/crystalsvg/cr32-app-xclock.png Binary files differindex 68ed9d4d2..f42138762 100644 --- a/pics/crystalsvg/cr32-app-xclock.png +++ b/pics/crystalsvg/cr32-app-xclock.png diff --git a/pics/crystalsvg/cr32-app-xconsole.png b/pics/crystalsvg/cr32-app-xconsole.png Binary files differindex 50f7c0ed2..e59d06f61 100644 --- a/pics/crystalsvg/cr32-app-xconsole.png +++ b/pics/crystalsvg/cr32-app-xconsole.png diff --git a/pics/crystalsvg/cr32-app-xedit.png b/pics/crystalsvg/cr32-app-xedit.png Binary files differindex f3f6419be..e05ad2e10 100644 --- a/pics/crystalsvg/cr32-app-xedit.png +++ b/pics/crystalsvg/cr32-app-xedit.png diff --git a/pics/crystalsvg/cr32-app-xemacs.png b/pics/crystalsvg/cr32-app-xemacs.png Binary files differindex 5d4708d42..e9d674ef0 100644 --- a/pics/crystalsvg/cr32-app-xemacs.png +++ b/pics/crystalsvg/cr32-app-xemacs.png diff --git a/pics/crystalsvg/cr32-app-xeyes.png b/pics/crystalsvg/cr32-app-xeyes.png Binary files differindex 1f306f721..a6db30d53 100644 --- a/pics/crystalsvg/cr32-app-xeyes.png +++ b/pics/crystalsvg/cr32-app-xeyes.png diff --git a/pics/crystalsvg/cr32-app-xfig.png b/pics/crystalsvg/cr32-app-xfig.png Binary files differindex 751591d64..147a4b658 100644 --- a/pics/crystalsvg/cr32-app-xfig.png +++ b/pics/crystalsvg/cr32-app-xfig.png diff --git a/pics/crystalsvg/cr32-app-xfmail.png b/pics/crystalsvg/cr32-app-xfmail.png Binary files differindex 0ddf0cf5a..360e0d5c4 100644 --- a/pics/crystalsvg/cr32-app-xfmail.png +++ b/pics/crystalsvg/cr32-app-xfmail.png diff --git a/pics/crystalsvg/cr32-app-xload.png b/pics/crystalsvg/cr32-app-xload.png Binary files differindex f28fad9cf..a988c417b 100644 --- a/pics/crystalsvg/cr32-app-xload.png +++ b/pics/crystalsvg/cr32-app-xload.png diff --git a/pics/crystalsvg/cr32-app-xmag.png b/pics/crystalsvg/cr32-app-xmag.png Binary files differindex af1e0651a..0d7d34d22 100644 --- a/pics/crystalsvg/cr32-app-xmag.png +++ b/pics/crystalsvg/cr32-app-xmag.png diff --git a/pics/crystalsvg/cr32-app-xmms.png b/pics/crystalsvg/cr32-app-xmms.png Binary files differindex 1fe75e327..8d07140dd 100644 --- a/pics/crystalsvg/cr32-app-xmms.png +++ b/pics/crystalsvg/cr32-app-xmms.png diff --git a/pics/crystalsvg/cr32-app-xosview.png b/pics/crystalsvg/cr32-app-xosview.png Binary files differindex 699ce2bd8..8e4c23e59 100644 --- a/pics/crystalsvg/cr32-app-xosview.png +++ b/pics/crystalsvg/cr32-app-xosview.png diff --git a/pics/crystalsvg/cr32-app-xpaint.png b/pics/crystalsvg/cr32-app-xpaint.png Binary files differindex a1224e02f..e1941f1e1 100644 --- a/pics/crystalsvg/cr32-app-xpaint.png +++ b/pics/crystalsvg/cr32-app-xpaint.png diff --git a/pics/crystalsvg/cr32-app-xv.png b/pics/crystalsvg/cr32-app-xv.png Binary files differindex 90d923fb1..adf45527e 100644 --- a/pics/crystalsvg/cr32-app-xv.png +++ b/pics/crystalsvg/cr32-app-xv.png diff --git a/pics/crystalsvg/cr32-category-applications-development.png b/pics/crystalsvg/cr32-category-applications-development.png Binary files differindex 0125d5b0b..d5a690760 100644 --- a/pics/crystalsvg/cr32-category-applications-development.png +++ b/pics/crystalsvg/cr32-category-applications-development.png diff --git a/pics/crystalsvg/cr32-category-applications-games.png b/pics/crystalsvg/cr32-category-applications-games.png Binary files differindex 2bb69e733..583a94370 100644 --- a/pics/crystalsvg/cr32-category-applications-games.png +++ b/pics/crystalsvg/cr32-category-applications-games.png diff --git a/pics/crystalsvg/cr32-category-applications-graphics.png b/pics/crystalsvg/cr32-category-applications-graphics.png Binary files differindex 62dae0dcc..9c85c679b 100644 --- a/pics/crystalsvg/cr32-category-applications-graphics.png +++ b/pics/crystalsvg/cr32-category-applications-graphics.png diff --git a/pics/crystalsvg/cr32-category-applications-internet.png b/pics/crystalsvg/cr32-category-applications-internet.png Binary files differindex e6f894d9f..b0913cb1e 100644 --- a/pics/crystalsvg/cr32-category-applications-internet.png +++ b/pics/crystalsvg/cr32-category-applications-internet.png diff --git a/pics/crystalsvg/cr32-category-applications-multimedia.png b/pics/crystalsvg/cr32-category-applications-multimedia.png Binary files differindex ffcb28ea1..9f2c02456 100644 --- a/pics/crystalsvg/cr32-category-applications-multimedia.png +++ b/pics/crystalsvg/cr32-category-applications-multimedia.png diff --git a/pics/crystalsvg/cr32-category-applications-office.png b/pics/crystalsvg/cr32-category-applications-office.png Binary files differindex 7ba994729..837485218 100644 --- a/pics/crystalsvg/cr32-category-applications-office.png +++ b/pics/crystalsvg/cr32-category-applications-office.png diff --git a/pics/crystalsvg/cr32-category-applications-science.png b/pics/crystalsvg/cr32-category-applications-science.png Binary files differindex 09e4c5841..e2b6e332e 100644 --- a/pics/crystalsvg/cr32-category-applications-science.png +++ b/pics/crystalsvg/cr32-category-applications-science.png diff --git a/pics/crystalsvg/cr32-category-applications-utilities.png b/pics/crystalsvg/cr32-category-applications-utilities.png Binary files differindex 63b511a27..1d42cf4f9 100644 --- a/pics/crystalsvg/cr32-category-applications-utilities.png +++ b/pics/crystalsvg/cr32-category-applications-utilities.png diff --git a/pics/crystalsvg/cr48-app-abiword.png b/pics/crystalsvg/cr48-app-abiword.png Binary files differindex e37b0b927..b04e8768f 100644 --- a/pics/crystalsvg/cr48-app-abiword.png +++ b/pics/crystalsvg/cr48-app-abiword.png diff --git a/pics/crystalsvg/cr48-app-acroread.png b/pics/crystalsvg/cr48-app-acroread.png Binary files differindex a16a821b3..8388d26f8 100644 --- a/pics/crystalsvg/cr48-app-acroread.png +++ b/pics/crystalsvg/cr48-app-acroread.png diff --git a/pics/crystalsvg/cr48-app-applixware.png b/pics/crystalsvg/cr48-app-applixware.png Binary files differindex 6f29629e8..6fd5869fa 100644 --- a/pics/crystalsvg/cr48-app-applixware.png +++ b/pics/crystalsvg/cr48-app-applixware.png diff --git a/pics/crystalsvg/cr48-app-blender.png b/pics/crystalsvg/cr48-app-blender.png Binary files differindex 19b70349f..6cbc8d0ee 100644 --- a/pics/crystalsvg/cr48-app-blender.png +++ b/pics/crystalsvg/cr48-app-blender.png diff --git a/pics/crystalsvg/cr48-app-bluefish.png b/pics/crystalsvg/cr48-app-bluefish.png Binary files differindex 7f534e9ce..a196cfdf7 100644 --- a/pics/crystalsvg/cr48-app-bluefish.png +++ b/pics/crystalsvg/cr48-app-bluefish.png diff --git a/pics/crystalsvg/cr48-app-clanbomber.png b/pics/crystalsvg/cr48-app-clanbomber.png Binary files differindex c7060f5e6..06b046349 100644 --- a/pics/crystalsvg/cr48-app-clanbomber.png +++ b/pics/crystalsvg/cr48-app-clanbomber.png diff --git a/pics/crystalsvg/cr48-app-designer.png b/pics/crystalsvg/cr48-app-designer.png Binary files differindex 774f7e121..c9efd845d 100644 --- a/pics/crystalsvg/cr48-app-designer.png +++ b/pics/crystalsvg/cr48-app-designer.png diff --git a/pics/crystalsvg/cr48-app-dia.png b/pics/crystalsvg/cr48-app-dia.png Binary files differindex b8b624949..937acc3f3 100644 --- a/pics/crystalsvg/cr48-app-dia.png +++ b/pics/crystalsvg/cr48-app-dia.png diff --git a/pics/crystalsvg/cr48-app-eclipse.png b/pics/crystalsvg/cr48-app-eclipse.png Binary files differindex 87b58d251..00dcfe973 100644 --- a/pics/crystalsvg/cr48-app-eclipse.png +++ b/pics/crystalsvg/cr48-app-eclipse.png diff --git a/pics/crystalsvg/cr48-app-edu_languages.png b/pics/crystalsvg/cr48-app-edu_languages.png Binary files differindex 886904e1d..fc0648991 100644 --- a/pics/crystalsvg/cr48-app-edu_languages.png +++ b/pics/crystalsvg/cr48-app-edu_languages.png diff --git a/pics/crystalsvg/cr48-app-edu_mathematics.png b/pics/crystalsvg/cr48-app-edu_mathematics.png Binary files differindex 8f36248f5..dee01cdd8 100644 --- a/pics/crystalsvg/cr48-app-edu_mathematics.png +++ b/pics/crystalsvg/cr48-app-edu_mathematics.png diff --git a/pics/crystalsvg/cr48-app-edu_miscellaneous.png b/pics/crystalsvg/cr48-app-edu_miscellaneous.png Binary files differindex 30f3a754e..ff3b8243b 100644 --- a/pics/crystalsvg/cr48-app-edu_miscellaneous.png +++ b/pics/crystalsvg/cr48-app-edu_miscellaneous.png diff --git a/pics/crystalsvg/cr48-app-emacs.png b/pics/crystalsvg/cr48-app-emacs.png Binary files differindex 88380f2b5..9dec00aeb 100644 --- a/pics/crystalsvg/cr48-app-emacs.png +++ b/pics/crystalsvg/cr48-app-emacs.png diff --git a/pics/crystalsvg/cr48-app-email.png b/pics/crystalsvg/cr48-app-email.png Binary files differindex d53e62064..f243cc9b6 100644 --- a/pics/crystalsvg/cr48-app-email.png +++ b/pics/crystalsvg/cr48-app-email.png diff --git a/pics/crystalsvg/cr48-app-evolution.png b/pics/crystalsvg/cr48-app-evolution.png Binary files differindex 412dcfbbc..475cd32d0 100644 --- a/pics/crystalsvg/cr48-app-evolution.png +++ b/pics/crystalsvg/cr48-app-evolution.png diff --git a/pics/crystalsvg/cr48-app-fifteenpieces.png b/pics/crystalsvg/cr48-app-fifteenpieces.png Binary files differindex 2432935db..812d7b955 100644 --- a/pics/crystalsvg/cr48-app-fifteenpieces.png +++ b/pics/crystalsvg/cr48-app-fifteenpieces.png diff --git a/pics/crystalsvg/cr48-app-gabber.png b/pics/crystalsvg/cr48-app-gabber.png Binary files differindex 4b5b87086..85a14d04e 100644 --- a/pics/crystalsvg/cr48-app-gabber.png +++ b/pics/crystalsvg/cr48-app-gabber.png diff --git a/pics/crystalsvg/cr48-app-gaim.png b/pics/crystalsvg/cr48-app-gaim.png Binary files differindex b44b969f0..45e2a5688 100644 --- a/pics/crystalsvg/cr48-app-gaim.png +++ b/pics/crystalsvg/cr48-app-gaim.png diff --git a/pics/crystalsvg/cr48-app-galeon.png b/pics/crystalsvg/cr48-app-galeon.png Binary files differindex b2cd02657..de45fe2d5 100644 --- a/pics/crystalsvg/cr48-app-galeon.png +++ b/pics/crystalsvg/cr48-app-galeon.png diff --git a/pics/crystalsvg/cr48-app-gimp.png b/pics/crystalsvg/cr48-app-gimp.png Binary files differindex 830fa4a61..2cde2fd14 100644 --- a/pics/crystalsvg/cr48-app-gimp.png +++ b/pics/crystalsvg/cr48-app-gimp.png diff --git a/pics/crystalsvg/cr48-app-gnome_apps.png b/pics/crystalsvg/cr48-app-gnome_apps.png Binary files differindex 3f717d0b5..47ceee203 100644 --- a/pics/crystalsvg/cr48-app-gnome_apps.png +++ b/pics/crystalsvg/cr48-app-gnome_apps.png diff --git a/pics/crystalsvg/cr48-app-gnomemeeting.png b/pics/crystalsvg/cr48-app-gnomemeeting.png Binary files differindex 2957a330e..737882989 100644 --- a/pics/crystalsvg/cr48-app-gnomemeeting.png +++ b/pics/crystalsvg/cr48-app-gnomemeeting.png diff --git a/pics/crystalsvg/cr48-app-gnucash.png b/pics/crystalsvg/cr48-app-gnucash.png Binary files differindex 1febf3206..073519503 100644 --- a/pics/crystalsvg/cr48-app-gnucash.png +++ b/pics/crystalsvg/cr48-app-gnucash.png diff --git a/pics/crystalsvg/cr48-app-gnumeric.png b/pics/crystalsvg/cr48-app-gnumeric.png Binary files differindex 695c71e8b..03b20838c 100644 --- a/pics/crystalsvg/cr48-app-gnumeric.png +++ b/pics/crystalsvg/cr48-app-gnumeric.png diff --git a/pics/crystalsvg/cr48-app-gvim.png b/pics/crystalsvg/cr48-app-gvim.png Binary files differindex 718766453..603da32e3 100644 --- a/pics/crystalsvg/cr48-app-gvim.png +++ b/pics/crystalsvg/cr48-app-gvim.png diff --git a/pics/crystalsvg/cr48-app-kbinaryclock.png b/pics/crystalsvg/cr48-app-kbinaryclock.png Binary files differindex d54204545..5c31ab2bb 100644 --- a/pics/crystalsvg/cr48-app-kbinaryclock.png +++ b/pics/crystalsvg/cr48-app-kbinaryclock.png diff --git a/pics/crystalsvg/cr48-app-kfm_home.png b/pics/crystalsvg/cr48-app-kfm_home.png Binary files differindex d08e6ab00..2a47d5459 100644 --- a/pics/crystalsvg/cr48-app-kfm_home.png +++ b/pics/crystalsvg/cr48-app-kfm_home.png diff --git a/pics/crystalsvg/cr48-app-kvirc.png b/pics/crystalsvg/cr48-app-kvirc.png Binary files differindex 7823680f1..aea724b31 100644 --- a/pics/crystalsvg/cr48-app-kvirc.png +++ b/pics/crystalsvg/cr48-app-kvirc.png diff --git a/pics/crystalsvg/cr48-app-licq.png b/pics/crystalsvg/cr48-app-licq.png Binary files differindex cdd4ab745..83b6d79cd 100644 --- a/pics/crystalsvg/cr48-app-licq.png +++ b/pics/crystalsvg/cr48-app-licq.png diff --git a/pics/crystalsvg/cr48-app-linuxconf.png b/pics/crystalsvg/cr48-app-linuxconf.png Binary files differindex 35c34e178..881279340 100644 --- a/pics/crystalsvg/cr48-app-linuxconf.png +++ b/pics/crystalsvg/cr48-app-linuxconf.png diff --git a/pics/crystalsvg/cr48-app-nedit.png b/pics/crystalsvg/cr48-app-nedit.png Binary files differindex a61754194..dd6818663 100644 --- a/pics/crystalsvg/cr48-app-nedit.png +++ b/pics/crystalsvg/cr48-app-nedit.png diff --git a/pics/crystalsvg/cr48-app-netscape.png b/pics/crystalsvg/cr48-app-netscape.png Binary files differindex e9f56b659..59c9912fb 100644 --- a/pics/crystalsvg/cr48-app-netscape.png +++ b/pics/crystalsvg/cr48-app-netscape.png diff --git a/pics/crystalsvg/cr48-app-opera.png b/pics/crystalsvg/cr48-app-opera.png Binary files differindex f092f4ec2..2f4f59fdb 100644 --- a/pics/crystalsvg/cr48-app-opera.png +++ b/pics/crystalsvg/cr48-app-opera.png diff --git a/pics/crystalsvg/cr48-app-package.png b/pics/crystalsvg/cr48-app-package.png Binary files differindex db59aecca..af9afa743 100644 --- a/pics/crystalsvg/cr48-app-package.png +++ b/pics/crystalsvg/cr48-app-package.png diff --git a/pics/crystalsvg/cr48-app-package_applications.png b/pics/crystalsvg/cr48-app-package_applications.png Binary files differindex 671fc7db7..967f879d2 100644 --- a/pics/crystalsvg/cr48-app-package_applications.png +++ b/pics/crystalsvg/cr48-app-package_applications.png diff --git a/pics/crystalsvg/cr48-app-package_editors.png b/pics/crystalsvg/cr48-app-package_editors.png Binary files differindex 298655555..99f40b440 100644 --- a/pics/crystalsvg/cr48-app-package_editors.png +++ b/pics/crystalsvg/cr48-app-package_editors.png diff --git a/pics/crystalsvg/cr48-app-package_edutainment.png b/pics/crystalsvg/cr48-app-package_edutainment.png Binary files differindex 30f3a754e..ff3b8243b 100644 --- a/pics/crystalsvg/cr48-app-package_edutainment.png +++ b/pics/crystalsvg/cr48-app-package_edutainment.png diff --git a/pics/crystalsvg/cr48-app-package_favourite.png b/pics/crystalsvg/cr48-app-package_favourite.png Binary files differindex 979680cf0..a72be661b 100644 --- a/pics/crystalsvg/cr48-app-package_favourite.png +++ b/pics/crystalsvg/cr48-app-package_favourite.png diff --git a/pics/crystalsvg/cr48-app-package_games_arcade.png b/pics/crystalsvg/cr48-app-package_games_arcade.png Binary files differindex 882c2b827..483cd9ba0 100644 --- a/pics/crystalsvg/cr48-app-package_games_arcade.png +++ b/pics/crystalsvg/cr48-app-package_games_arcade.png diff --git a/pics/crystalsvg/cr48-app-package_games_board.png b/pics/crystalsvg/cr48-app-package_games_board.png Binary files differindex 06967b0da..400f8a7de 100644 --- a/pics/crystalsvg/cr48-app-package_games_board.png +++ b/pics/crystalsvg/cr48-app-package_games_board.png diff --git a/pics/crystalsvg/cr48-app-package_games_card.png b/pics/crystalsvg/cr48-app-package_games_card.png Binary files differindex 13b98c99c..34b695839 100644 --- a/pics/crystalsvg/cr48-app-package_games_card.png +++ b/pics/crystalsvg/cr48-app-package_games_card.png diff --git a/pics/crystalsvg/cr48-app-package_games_kids.png b/pics/crystalsvg/cr48-app-package_games_kids.png Binary files differindex 93dafddf8..d70dd4f72 100644 --- a/pics/crystalsvg/cr48-app-package_games_kids.png +++ b/pics/crystalsvg/cr48-app-package_games_kids.png diff --git a/pics/crystalsvg/cr48-app-package_games_strategy.png b/pics/crystalsvg/cr48-app-package_games_strategy.png Binary files differindex 146543f81..f8bb1c5a0 100644 --- a/pics/crystalsvg/cr48-app-package_games_strategy.png +++ b/pics/crystalsvg/cr48-app-package_games_strategy.png diff --git a/pics/crystalsvg/cr48-app-package_settings.png b/pics/crystalsvg/cr48-app-package_settings.png Binary files differindex 8b171e0bd..79a1e7ad0 100644 --- a/pics/crystalsvg/cr48-app-package_settings.png +++ b/pics/crystalsvg/cr48-app-package_settings.png diff --git a/pics/crystalsvg/cr48-app-package_system.png b/pics/crystalsvg/cr48-app-package_system.png Binary files differindex 3ed096d9d..dac0b12da 100644 --- a/pics/crystalsvg/cr48-app-package_system.png +++ b/pics/crystalsvg/cr48-app-package_system.png diff --git a/pics/crystalsvg/cr48-app-package_toys.png b/pics/crystalsvg/cr48-app-package_toys.png Binary files differindex b8e20c4ac..b1260d2d1 100644 --- a/pics/crystalsvg/cr48-app-package_toys.png +++ b/pics/crystalsvg/cr48-app-package_toys.png diff --git a/pics/crystalsvg/cr48-app-pan.png b/pics/crystalsvg/cr48-app-pan.png Binary files differindex b7cc52ae4..f8336c082 100644 --- a/pics/crystalsvg/cr48-app-pan.png +++ b/pics/crystalsvg/cr48-app-pan.png diff --git a/pics/crystalsvg/cr48-app-penguin.png b/pics/crystalsvg/cr48-app-penguin.png Binary files differindex e8d33ab4e..4b39f47d6 100644 --- a/pics/crystalsvg/cr48-app-penguin.png +++ b/pics/crystalsvg/cr48-app-penguin.png diff --git a/pics/crystalsvg/cr48-app-phppg.png b/pics/crystalsvg/cr48-app-phppg.png Binary files differindex 5655253d8..ec551fc82 100644 --- a/pics/crystalsvg/cr48-app-phppg.png +++ b/pics/crystalsvg/cr48-app-phppg.png diff --git a/pics/crystalsvg/cr48-app-planner.png b/pics/crystalsvg/cr48-app-planner.png Binary files differindex b915c1023..509e7a380 100644 --- a/pics/crystalsvg/cr48-app-planner.png +++ b/pics/crystalsvg/cr48-app-planner.png diff --git a/pics/crystalsvg/cr48-app-pysol.png b/pics/crystalsvg/cr48-app-pysol.png Binary files differindex d73085179..e029448f5 100644 --- a/pics/crystalsvg/cr48-app-pysol.png +++ b/pics/crystalsvg/cr48-app-pysol.png diff --git a/pics/crystalsvg/cr48-app-randr.png b/pics/crystalsvg/cr48-app-randr.png Binary files differindex c8959019d..85e2fcd6b 100644 --- a/pics/crystalsvg/cr48-app-randr.png +++ b/pics/crystalsvg/cr48-app-randr.png diff --git a/pics/crystalsvg/cr48-app-remote.png b/pics/crystalsvg/cr48-app-remote.png Binary files differindex b4cf93a09..9c6e13355 100644 --- a/pics/crystalsvg/cr48-app-remote.png +++ b/pics/crystalsvg/cr48-app-remote.png diff --git a/pics/crystalsvg/cr48-app-scribus.png b/pics/crystalsvg/cr48-app-scribus.png Binary files differindex 571c4205f..534e54098 100644 --- a/pics/crystalsvg/cr48-app-scribus.png +++ b/pics/crystalsvg/cr48-app-scribus.png diff --git a/pics/crystalsvg/cr48-app-sodipodi.png b/pics/crystalsvg/cr48-app-sodipodi.png Binary files differindex 90a339869..624810048 100644 --- a/pics/crystalsvg/cr48-app-sodipodi.png +++ b/pics/crystalsvg/cr48-app-sodipodi.png diff --git a/pics/crystalsvg/cr48-app-staroffice.png b/pics/crystalsvg/cr48-app-staroffice.png Binary files differindex bfd33b17e..6070f9b6f 100644 --- a/pics/crystalsvg/cr48-app-staroffice.png +++ b/pics/crystalsvg/cr48-app-staroffice.png diff --git a/pics/crystalsvg/cr48-app-systemtray.png b/pics/crystalsvg/cr48-app-systemtray.png Binary files differindex 768f9748c..855fc947a 100644 --- a/pics/crystalsvg/cr48-app-systemtray.png +++ b/pics/crystalsvg/cr48-app-systemtray.png diff --git a/pics/crystalsvg/cr48-app-taskbar.png b/pics/crystalsvg/cr48-app-taskbar.png Binary files differindex e9b51c898..49fa84f93 100644 --- a/pics/crystalsvg/cr48-app-taskbar.png +++ b/pics/crystalsvg/cr48-app-taskbar.png diff --git a/pics/crystalsvg/cr48-app-terminal.png b/pics/crystalsvg/cr48-app-terminal.png Binary files differindex de458c184..87e977ed6 100644 --- a/pics/crystalsvg/cr48-app-terminal.png +++ b/pics/crystalsvg/cr48-app-terminal.png diff --git a/pics/crystalsvg/cr48-app-tux.png b/pics/crystalsvg/cr48-app-tux.png Binary files differindex d75f61b08..99f5bd37f 100644 --- a/pics/crystalsvg/cr48-app-tux.png +++ b/pics/crystalsvg/cr48-app-tux.png diff --git a/pics/crystalsvg/cr48-app-vnc.png b/pics/crystalsvg/cr48-app-vnc.png Binary files differindex 67dc984bb..b75b62d0e 100644 --- a/pics/crystalsvg/cr48-app-vnc.png +++ b/pics/crystalsvg/cr48-app-vnc.png diff --git a/pics/crystalsvg/cr48-app-wine.png b/pics/crystalsvg/cr48-app-wine.png Binary files differindex 15c417a9c..fbfc75e03 100644 --- a/pics/crystalsvg/cr48-app-wine.png +++ b/pics/crystalsvg/cr48-app-wine.png diff --git a/pics/crystalsvg/cr48-app-wmaker_apps.png b/pics/crystalsvg/cr48-app-wmaker_apps.png Binary files differindex 8fe962c4b..4e9a7fa07 100644 --- a/pics/crystalsvg/cr48-app-wmaker_apps.png +++ b/pics/crystalsvg/cr48-app-wmaker_apps.png diff --git a/pics/crystalsvg/cr48-app-wp.png b/pics/crystalsvg/cr48-app-wp.png Binary files differindex a2fa50794..603358c32 100644 --- a/pics/crystalsvg/cr48-app-wp.png +++ b/pics/crystalsvg/cr48-app-wp.png diff --git a/pics/crystalsvg/cr48-app-xchat.png b/pics/crystalsvg/cr48-app-xchat.png Binary files differindex 814c899d1..413e0b4c8 100644 --- a/pics/crystalsvg/cr48-app-xchat.png +++ b/pics/crystalsvg/cr48-app-xchat.png diff --git a/pics/crystalsvg/cr48-app-xclock.png b/pics/crystalsvg/cr48-app-xclock.png Binary files differindex 141f5b5c3..56f0cb9bd 100644 --- a/pics/crystalsvg/cr48-app-xclock.png +++ b/pics/crystalsvg/cr48-app-xclock.png diff --git a/pics/crystalsvg/cr48-app-xedit.png b/pics/crystalsvg/cr48-app-xedit.png Binary files differindex c0fae6403..c3b373dc1 100644 --- a/pics/crystalsvg/cr48-app-xedit.png +++ b/pics/crystalsvg/cr48-app-xedit.png diff --git a/pics/crystalsvg/cr48-app-xemacs.png b/pics/crystalsvg/cr48-app-xemacs.png Binary files differindex 8ebd21083..5bf1a0c69 100644 --- a/pics/crystalsvg/cr48-app-xemacs.png +++ b/pics/crystalsvg/cr48-app-xemacs.png diff --git a/pics/crystalsvg/cr48-app-xfmail.png b/pics/crystalsvg/cr48-app-xfmail.png Binary files differindex 20fc52bd9..5f9c874a3 100644 --- a/pics/crystalsvg/cr48-app-xfmail.png +++ b/pics/crystalsvg/cr48-app-xfmail.png diff --git a/pics/crystalsvg/cr48-app-xmag.png b/pics/crystalsvg/cr48-app-xmag.png Binary files differindex 190964357..72376f481 100644 --- a/pics/crystalsvg/cr48-app-xmag.png +++ b/pics/crystalsvg/cr48-app-xmag.png diff --git a/pics/crystalsvg/cr48-app-xv.png b/pics/crystalsvg/cr48-app-xv.png Binary files differindex 2c5dd69db..96aebac37 100644 --- a/pics/crystalsvg/cr48-app-xv.png +++ b/pics/crystalsvg/cr48-app-xv.png diff --git a/pics/crystalsvg/cr48-category-applications-development.png b/pics/crystalsvg/cr48-category-applications-development.png Binary files differindex 72e285607..eb17dd8ef 100644 --- a/pics/crystalsvg/cr48-category-applications-development.png +++ b/pics/crystalsvg/cr48-category-applications-development.png diff --git a/pics/crystalsvg/cr48-category-applications-games.png b/pics/crystalsvg/cr48-category-applications-games.png Binary files differindex 9565ce1ff..0fcf82cbe 100644 --- a/pics/crystalsvg/cr48-category-applications-games.png +++ b/pics/crystalsvg/cr48-category-applications-games.png diff --git a/pics/crystalsvg/cr48-category-applications-graphics.png b/pics/crystalsvg/cr48-category-applications-graphics.png Binary files differindex ae0ef0274..5e80fd0d8 100644 --- a/pics/crystalsvg/cr48-category-applications-graphics.png +++ b/pics/crystalsvg/cr48-category-applications-graphics.png diff --git a/pics/crystalsvg/cr48-category-applications-internet.png b/pics/crystalsvg/cr48-category-applications-internet.png Binary files differindex 47b78a93c..060edb451 100644 --- a/pics/crystalsvg/cr48-category-applications-internet.png +++ b/pics/crystalsvg/cr48-category-applications-internet.png diff --git a/pics/crystalsvg/cr48-category-applications-multimedia.png b/pics/crystalsvg/cr48-category-applications-multimedia.png Binary files differindex 97edf2f95..0aca4f6f9 100644 --- a/pics/crystalsvg/cr48-category-applications-multimedia.png +++ b/pics/crystalsvg/cr48-category-applications-multimedia.png diff --git a/pics/crystalsvg/cr48-category-applications-office.png b/pics/crystalsvg/cr48-category-applications-office.png Binary files differindex 774fcae09..b4d453489 100644 --- a/pics/crystalsvg/cr48-category-applications-office.png +++ b/pics/crystalsvg/cr48-category-applications-office.png diff --git a/pics/crystalsvg/cr48-category-applications-science.png b/pics/crystalsvg/cr48-category-applications-science.png Binary files differindex 05186662e..ce94273f4 100644 --- a/pics/crystalsvg/cr48-category-applications-science.png +++ b/pics/crystalsvg/cr48-category-applications-science.png diff --git a/pics/crystalsvg/cr48-category-applications-utilities.png b/pics/crystalsvg/cr48-category-applications-utilities.png Binary files differindex 4858a848d..8e96ae843 100644 --- a/pics/crystalsvg/cr48-category-applications-utilities.png +++ b/pics/crystalsvg/cr48-category-applications-utilities.png diff --git a/pics/crystalsvg/cr64-app-acroread.png b/pics/crystalsvg/cr64-app-acroread.png Binary files differindex 715af866d..b240a2b3c 100644 --- a/pics/crystalsvg/cr64-app-acroread.png +++ b/pics/crystalsvg/cr64-app-acroread.png diff --git a/pics/crystalsvg/cr64-app-applixware.png b/pics/crystalsvg/cr64-app-applixware.png Binary files differindex 544270362..b74c61e50 100644 --- a/pics/crystalsvg/cr64-app-applixware.png +++ b/pics/crystalsvg/cr64-app-applixware.png diff --git a/pics/crystalsvg/cr64-app-clanbomber.png b/pics/crystalsvg/cr64-app-clanbomber.png Binary files differindex 61200b981..554c0176a 100644 --- a/pics/crystalsvg/cr64-app-clanbomber.png +++ b/pics/crystalsvg/cr64-app-clanbomber.png diff --git a/pics/crystalsvg/cr64-app-email.png b/pics/crystalsvg/cr64-app-email.png Binary files differindex 1b53d186f..ddc269450 100644 --- a/pics/crystalsvg/cr64-app-email.png +++ b/pics/crystalsvg/cr64-app-email.png diff --git a/pics/crystalsvg/cr64-app-gimp.png b/pics/crystalsvg/cr64-app-gimp.png Binary files differindex 4741b9b91..f98303ac9 100644 --- a/pics/crystalsvg/cr64-app-gimp.png +++ b/pics/crystalsvg/cr64-app-gimp.png diff --git a/pics/crystalsvg/cr64-app-gvim.png b/pics/crystalsvg/cr64-app-gvim.png Binary files differindex 2bdc8bd8c..34d3f2cab 100644 --- a/pics/crystalsvg/cr64-app-gvim.png +++ b/pics/crystalsvg/cr64-app-gvim.png diff --git a/pics/crystalsvg/cr64-app-kfm_home.png b/pics/crystalsvg/cr64-app-kfm_home.png Binary files differindex acf3e4aa8..73f7ef8d2 100644 --- a/pics/crystalsvg/cr64-app-kfm_home.png +++ b/pics/crystalsvg/cr64-app-kfm_home.png diff --git a/pics/crystalsvg/cr64-app-kvirc.png b/pics/crystalsvg/cr64-app-kvirc.png Binary files differindex bde777ebd..342dfcaed 100644 --- a/pics/crystalsvg/cr64-app-kvirc.png +++ b/pics/crystalsvg/cr64-app-kvirc.png diff --git a/pics/crystalsvg/cr64-app-licq.png b/pics/crystalsvg/cr64-app-licq.png Binary files differindex 8d45af839..95f8912e3 100644 --- a/pics/crystalsvg/cr64-app-licq.png +++ b/pics/crystalsvg/cr64-app-licq.png diff --git a/pics/crystalsvg/cr64-app-linuxconf.png b/pics/crystalsvg/cr64-app-linuxconf.png Binary files differindex 71c357560..d3938ba42 100644 --- a/pics/crystalsvg/cr64-app-linuxconf.png +++ b/pics/crystalsvg/cr64-app-linuxconf.png diff --git a/pics/crystalsvg/cr64-app-nedit.png b/pics/crystalsvg/cr64-app-nedit.png Binary files differindex aa3bd6063..755e8d2f2 100644 --- a/pics/crystalsvg/cr64-app-nedit.png +++ b/pics/crystalsvg/cr64-app-nedit.png diff --git a/pics/crystalsvg/cr64-app-netscape.png b/pics/crystalsvg/cr64-app-netscape.png Binary files differindex 42df68676..c31baf25e 100644 --- a/pics/crystalsvg/cr64-app-netscape.png +++ b/pics/crystalsvg/cr64-app-netscape.png diff --git a/pics/crystalsvg/cr64-app-package.png b/pics/crystalsvg/cr64-app-package.png Binary files differindex d43ebbd05..e1d1391f0 100644 --- a/pics/crystalsvg/cr64-app-package.png +++ b/pics/crystalsvg/cr64-app-package.png diff --git a/pics/crystalsvg/cr64-app-package_applications.png b/pics/crystalsvg/cr64-app-package_applications.png Binary files differindex d85a736c7..9caf9c1b1 100644 --- a/pics/crystalsvg/cr64-app-package_applications.png +++ b/pics/crystalsvg/cr64-app-package_applications.png diff --git a/pics/crystalsvg/cr64-app-package_favourite.png b/pics/crystalsvg/cr64-app-package_favourite.png Binary files differindex 989e1270b..d4ee0be89 100644 --- a/pics/crystalsvg/cr64-app-package_favourite.png +++ b/pics/crystalsvg/cr64-app-package_favourite.png diff --git a/pics/crystalsvg/cr64-app-package_settings.png b/pics/crystalsvg/cr64-app-package_settings.png Binary files differindex 02bca4fb4..4db75e447 100644 --- a/pics/crystalsvg/cr64-app-package_settings.png +++ b/pics/crystalsvg/cr64-app-package_settings.png diff --git a/pics/crystalsvg/cr64-app-package_toys.png b/pics/crystalsvg/cr64-app-package_toys.png Binary files differindex 368eb4cd7..3c7f1296b 100644 --- a/pics/crystalsvg/cr64-app-package_toys.png +++ b/pics/crystalsvg/cr64-app-package_toys.png diff --git a/pics/crystalsvg/cr64-app-penguin.png b/pics/crystalsvg/cr64-app-penguin.png Binary files differindex 1dc2da686..159a89f14 100644 --- a/pics/crystalsvg/cr64-app-penguin.png +++ b/pics/crystalsvg/cr64-app-penguin.png diff --git a/pics/crystalsvg/cr64-app-phppg.png b/pics/crystalsvg/cr64-app-phppg.png Binary files differindex d3fa288c2..219f445a0 100644 --- a/pics/crystalsvg/cr64-app-phppg.png +++ b/pics/crystalsvg/cr64-app-phppg.png diff --git a/pics/crystalsvg/cr64-app-pysol.png b/pics/crystalsvg/cr64-app-pysol.png Binary files differindex dc0115779..5d3b389a2 100644 --- a/pics/crystalsvg/cr64-app-pysol.png +++ b/pics/crystalsvg/cr64-app-pysol.png diff --git a/pics/crystalsvg/cr64-app-qtella.png b/pics/crystalsvg/cr64-app-qtella.png Binary files differindex ad180c2d9..66ef8308e 100644 --- a/pics/crystalsvg/cr64-app-qtella.png +++ b/pics/crystalsvg/cr64-app-qtella.png diff --git a/pics/crystalsvg/cr64-app-randr.png b/pics/crystalsvg/cr64-app-randr.png Binary files differindex 5d60f24f6..aba6364d6 100644 --- a/pics/crystalsvg/cr64-app-randr.png +++ b/pics/crystalsvg/cr64-app-randr.png diff --git a/pics/crystalsvg/cr64-app-staroffice.png b/pics/crystalsvg/cr64-app-staroffice.png Binary files differindex df2a1017a..a45234ab5 100644 --- a/pics/crystalsvg/cr64-app-staroffice.png +++ b/pics/crystalsvg/cr64-app-staroffice.png diff --git a/pics/crystalsvg/cr64-app-systemtray.png b/pics/crystalsvg/cr64-app-systemtray.png Binary files differindex 57e17a576..d7091235c 100644 --- a/pics/crystalsvg/cr64-app-systemtray.png +++ b/pics/crystalsvg/cr64-app-systemtray.png diff --git a/pics/crystalsvg/cr64-app-taskbar.png b/pics/crystalsvg/cr64-app-taskbar.png Binary files differindex 4277fdaa4..508281784 100644 --- a/pics/crystalsvg/cr64-app-taskbar.png +++ b/pics/crystalsvg/cr64-app-taskbar.png diff --git a/pics/crystalsvg/cr64-app-terminal.png b/pics/crystalsvg/cr64-app-terminal.png Binary files differindex efe6429e2..8df6f4e9f 100644 --- a/pics/crystalsvg/cr64-app-terminal.png +++ b/pics/crystalsvg/cr64-app-terminal.png diff --git a/pics/crystalsvg/cr64-app-tux.png b/pics/crystalsvg/cr64-app-tux.png Binary files differindex 99f3465e5..ceb8e2fa5 100644 --- a/pics/crystalsvg/cr64-app-tux.png +++ b/pics/crystalsvg/cr64-app-tux.png diff --git a/pics/crystalsvg/cr64-app-wp.png b/pics/crystalsvg/cr64-app-wp.png Binary files differindex 68f030d5b..0948ecce4 100644 --- a/pics/crystalsvg/cr64-app-wp.png +++ b/pics/crystalsvg/cr64-app-wp.png diff --git a/pics/crystalsvg/cr64-app-xclock.png b/pics/crystalsvg/cr64-app-xclock.png Binary files differindex 88a044c4d..1356f5c62 100644 --- a/pics/crystalsvg/cr64-app-xclock.png +++ b/pics/crystalsvg/cr64-app-xclock.png diff --git a/pics/crystalsvg/cr64-app-xfmail.png b/pics/crystalsvg/cr64-app-xfmail.png Binary files differindex d86a1f8a8..7c59faea2 100644 --- a/pics/crystalsvg/cr64-app-xfmail.png +++ b/pics/crystalsvg/cr64-app-xfmail.png diff --git a/pics/crystalsvg/cr64-app-xmag.png b/pics/crystalsvg/cr64-app-xmag.png Binary files differindex 5049025b5..766bb5c94 100644 --- a/pics/crystalsvg/cr64-app-xmag.png +++ b/pics/crystalsvg/cr64-app-xmag.png diff --git a/pics/crystalsvg/cr64-category-applications-development.png b/pics/crystalsvg/cr64-category-applications-development.png Binary files differindex 15e5af5f6..d7d869327 100644 --- a/pics/crystalsvg/cr64-category-applications-development.png +++ b/pics/crystalsvg/cr64-category-applications-development.png diff --git a/pics/crystalsvg/cr64-category-applications-games.png b/pics/crystalsvg/cr64-category-applications-games.png Binary files differindex e87b2dbae..45a9c1d94 100644 --- a/pics/crystalsvg/cr64-category-applications-games.png +++ b/pics/crystalsvg/cr64-category-applications-games.png diff --git a/pics/crystalsvg/cr64-category-applications-internet.png b/pics/crystalsvg/cr64-category-applications-internet.png Binary files differindex 3f7323c1b..dda72d60c 100644 --- a/pics/crystalsvg/cr64-category-applications-internet.png +++ b/pics/crystalsvg/cr64-category-applications-internet.png diff --git a/pics/crystalsvg/cr64-category-applications-multimedia.png b/pics/crystalsvg/cr64-category-applications-multimedia.png Binary files differindex 93f13f7ed..0c3f462ea 100644 --- a/pics/crystalsvg/cr64-category-applications-multimedia.png +++ b/pics/crystalsvg/cr64-category-applications-multimedia.png diff --git a/pics/crystalsvg/cr64-category-applications-utilities.png b/pics/crystalsvg/cr64-category-applications-utilities.png Binary files differindex 4f5e2736c..add519009 100644 --- a/pics/crystalsvg/cr64-category-applications-utilities.png +++ b/pics/crystalsvg/cr64-category-applications-utilities.png diff --git a/pics/wallpapers/Trinity4.png b/pics/wallpapers/Trinity4.png Binary files differindex 7c5f4ddf3..00b1397cf 100644 --- a/pics/wallpapers/Trinity4.png +++ b/pics/wallpapers/Trinity4.png diff --git a/pics/wallpapers/andes-venezolanos.png b/pics/wallpapers/andes-venezolanos.png Binary files differindex 5a8e63a2f..19a626502 100644 --- a/pics/wallpapers/andes-venezolanos.png +++ b/pics/wallpapers/andes-venezolanos.png diff --git a/pics/wallpapers/aurora.png b/pics/wallpapers/aurora.png Binary files differindex 7cbac8ed3..c245f41e9 100644 --- a/pics/wallpapers/aurora.png +++ b/pics/wallpapers/aurora.png diff --git a/pics/wallpapers/celtic.png b/pics/wallpapers/celtic.png Binary files differindex 2e210089c..0bf599360 100644 --- a/pics/wallpapers/celtic.png +++ b/pics/wallpapers/celtic.png diff --git a/pics/wallpapers/globe.png b/pics/wallpapers/globe.png Binary files differindex 8ac321aeb..d9c70cdd8 100644 --- a/pics/wallpapers/globe.png +++ b/pics/wallpapers/globe.png diff --git a/pics/wallpapers/horse-head-nebula.png b/pics/wallpapers/horse-head-nebula.png Binary files differindex 29f5218d2..afb3ad3aa 100644 --- a/pics/wallpapers/horse-head-nebula.png +++ b/pics/wallpapers/horse-head-nebula.png diff --git a/pics/wallpapers/isadora.png b/pics/wallpapers/isadora.png Binary files differindex 4b1f883f4..6343885f1 100644 --- a/pics/wallpapers/isadora.png +++ b/pics/wallpapers/isadora.png diff --git a/pics/wallpapers/konqui.png b/pics/wallpapers/konqui.png Binary files differindex f3d3433be..68bc01cc7 100644 --- a/pics/wallpapers/konqui.png +++ b/pics/wallpapers/konqui.png @@ -581,7 +581,7 @@ if [ "$TGTK_PRELOAD" != "" ]; then elif [ -e /usr/lib/libnspr4.so ]; then TGTK_NSPR_PRELOAD="/usr/lib/libnspr4.so:" fi - export LD_PRELOAD=$TGTK_PRELOAD:$KGTK_NSPR_PRELOAD$LD_PRELOAD + export LD_PRELOAD=$TGTK_PRELOAD:$TGTK_NSPR_PRELOAD$LD_PRELOAD fi # We run mkfontdir on the user's font dirs (if we have permission) to pick @@ -640,6 +640,29 @@ $TDEDIR/bin/dcopserver_shutdown echo "[starttde] Starting Trinity..." 1>&2 +# Start tde_dbus_hardwarecontrol at background +if [ -x $TDEDIR/bin/tde_dbus_hardwarecontrol ]; then + ( + TDE_DBUS=$(dbus-send --system --print-reply --dest=org.freedesktop.DBus \ + /org/freedesktop/DBus org.freedesktop.DBus.StartServiceByName \ + string:org.trinitydesktop.hardwarecontrol \ + uint32:0 | \ + sed -n "s| *uint32 \([0-9]*\).*|\1|p") + case "$TDE_DBUS" in + 2) + TDE_DBUS_STATE="running" + ;; + 1) + TDE_DBUS_STATE="started" + ;; + *) + TDE_DBUS_STATE="not started" + ;; + esac + echo "[starttde] Trinity hardware control dbus daemon $TDE_DBUS_STATE." 1>&2 + )& +fi + # Detect any running Xorg composition managers. $TDEDIR/bin/kdetcompmgr @@ -708,7 +731,7 @@ fi # TDE_FULL_SESSION=true export TDE_FULL_SESSION -xprop -root -f TDE_FULL_SESSION 8t -set TDE_FULL_SESSION true +xprop -root -f TDE_FULL_SESSION 8s -set TDE_FULL_SESSION true echo "[starttde] TDE_FULL_SESSION: $TDE_FULL_SESSION" 1>&2 TDE_SESSION_UID=`id -u` export TDE_SESSION_UID diff --git a/tdeioslave/mac/cr16-app-mac.png b/tdeioslave/mac/cr16-app-mac.png Binary files differindex 930694eab..44298a2c4 100644 --- a/tdeioslave/mac/cr16-app-mac.png +++ b/tdeioslave/mac/cr16-app-mac.png diff --git a/tdeioslave/mac/cr32-app-mac.png b/tdeioslave/mac/cr32-app-mac.png Binary files differindex 87df6fb85..f7d14d314 100644 --- a/tdeioslave/mac/cr32-app-mac.png +++ b/tdeioslave/mac/cr32-app-mac.png diff --git a/tdeioslave/media/libmediacommon/mediamanagersettings.kcfg b/tdeioslave/media/libmediacommon/mediamanagersettings.kcfg index 2994680cd..32725c1bb 100644 --- a/tdeioslave/media/libmediacommon/mediamanagersettings.kcfg +++ b/tdeioslave/media/libmediacommon/mediamanagersettings.kcfg @@ -24,5 +24,10 @@ <whatsthis>Allows TDE to autostart application after a medium mount if it contains an Autostart or an Autoopen file.</whatsthis> <default>true</default> </entry> + <entry name="NotificationPopupsEnabled" type="Bool"> + <label>Enable notification popups</label> + <whatsthis>Deselect this if you do not want action request popups to be generated when devices are plugged in.</whatsthis> + <default>true</default> + </entry> </group> </kcfg> diff --git a/tdeioslave/media/mediamanager/halbackend.cpp b/tdeioslave/media/mediamanager/halbackend.cpp index 05cdae425..80d443392 100644 --- a/tdeioslave/media/mediamanager/halbackend.cpp +++ b/tdeioslave/media/mediamanager/halbackend.cpp @@ -48,6 +48,10 @@ (medium->isMounted() ? TQString("_mount") : TQString("_unmount")) + \ (medium->isEncrypted() ? (halClearVolume ? "_decrypt" : "_encrypt") : "" ) \ ) +#define MOUNTED_ICON_SUFFIX ( \ + (medium->isMounted() ? TQString("-mounted") : TQString("")) + \ + (medium->isEncrypted() ? (halClearVolume ? "-decrypted" : "-encrypted") : "" ) \ + ) /* Static instance of this class, for static HAL callbacks */ static HALBackend* s_HALBackend; @@ -616,16 +620,16 @@ void HALBackend::setVolumeProperties(Medium* medium) medium->needMounting(); switch (libhal_drive_get_type(halDrive)) { case LIBHAL_DRIVE_TYPE_COMPACT_FLASH: - medium->setIconName("compact_flash" + MOUNT_ICON_SUFFIX); + medium->setIconName("media-flash-compact_flash" + MOUNTED_ICON_SUFFIX); break; case LIBHAL_DRIVE_TYPE_MEMORY_STICK: - medium->setIconName("memory_stick" + MOUNT_ICON_SUFFIX); + medium->setIconName("media-flash-memory_stick" + MOUNTED_ICON_SUFFIX); break; case LIBHAL_DRIVE_TYPE_SMART_MEDIA: - medium->setIconName("smart_media" + MOUNT_ICON_SUFFIX); + medium->setIconName("media-flash-smart_media" + MOUNTED_ICON_SUFFIX); break; case LIBHAL_DRIVE_TYPE_SD_MMC: - medium->setIconName("sd_mmc" + MOUNT_ICON_SUFFIX); + medium->setIconName("media-flash-sd_mmc" + MOUNTED_ICON_SUFFIX); break; case LIBHAL_DRIVE_TYPE_PORTABLE_AUDIO_PLAYER: { @@ -654,7 +658,7 @@ void HALBackend::setVolumeProperties(Medium* medium) break; } case LIBHAL_DRIVE_TYPE_TAPE: - medium->setIconName(TQString::null); //FIXME need icon + medium->setIconName("media-tape" + MOUNTED_ICON_SUFFIX); break; default: medium->setIconName(TQString::null); @@ -1035,9 +1039,9 @@ TQStringList HALBackend::mountoptions(const TQString &name) if (valids.contains("shortname")) { TQString svalue = config.readEntry("shortname", "lower").lower(); - if (svalue == "winnt") + if (svalue == "windows nt") result << "shortname=winnt"; - else if (svalue == "win95") + else if (svalue == "windows 95") result << "shortname=win95"; else if (svalue == "mixed") result << "shortname=mixed"; diff --git a/tdeioslave/media/mediamanager/tdehardwarebackend.cpp b/tdeioslave/media/mediamanager/tdehardwarebackend.cpp index a7cbb2260..4746f48cc 100644 --- a/tdeioslave/media/mediamanager/tdehardwarebackend.cpp +++ b/tdeioslave/media/mediamanager/tdehardwarebackend.cpp @@ -45,6 +45,10 @@ (medium->isMounted() ? TQString("_mount") : TQString("_unmount")) + \ (medium->isEncrypted() ? (sdevice->isDiskOfType(TDEDiskDeviceType::UnlockedCrypt) ? "_decrypt" : "_encrypt") : "" ) \ ) +#define MOUNTED_ICON_SUFFIX ( \ + (medium->isMounted() ? TQString("-mounted") : TQString("")) + \ + (medium->isEncrypted() ? (sdevice->isDiskOfType(TDEDiskDeviceType::UnlockedCrypt) ? "-decrypted" : "-encrypted") : "" ) \ + ) #define CHECK_FOR_AND_EXECUTE_AUTOMOUNT(udi, medium, allowNotification) { \ TQMap<TQString,TQString> options = MediaManagerUtils::splitOptions(mountoptions(udi)); \ @@ -146,6 +150,14 @@ void TDEBackend::AddDevice(TDEStorageDevice * sdevice, bool allowNotification) allowNotification = false; } + // Check if user wants the full popup to be suppressed + bool allowDialogNotification = allowNotification; + TDEConfig config("mediamanagerrc"); + config.setGroup("Global"); + if (!config.readBoolEntry("NotificationPopupsEnabled", false)) { + allowDialogNotification = false; + } + // Add volume block devices if (sdevice->isDiskOfType(TDEDiskDeviceType::HDD)) { /* We only list volumes that... @@ -163,7 +175,8 @@ void TDEBackend::AddDevice(TDEStorageDevice * sdevice, bool allowNotification) /* We also don't display devices that underlie other devices; * e.g. the raw partition of a device mapper volume */ - else if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::UsedByDevice)) { + else if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::UsedByDevice) + || (sdevice->fileSystemUsage().upper() == "RAID")) { // } else { @@ -190,7 +203,7 @@ void TDEBackend::AddDevice(TDEStorageDevice * sdevice, bool allowNotification) } // Insert medium into list - m_mediaList.addMedium(medium, allowNotification); + m_mediaList.addMedium(medium, allowDialogNotification); kdDebug(1219) << "TDEBackend::AddDevice inserted hard medium for " << sdevice->uniqueID() << endl; @@ -233,7 +246,7 @@ void TDEBackend::AddDevice(TDEStorageDevice * sdevice, bool allowNotification) setVolumeProperties(medium); // Insert medium into list - m_mediaList.addMedium(medium, allowNotification); + m_mediaList.addMedium(medium, allowDialogNotification); kdDebug(1219) << "TDEBackend::AddDevice inserted optical medium for " << sdevice->uniqueID() << endl; @@ -248,6 +261,7 @@ void TDEBackend::AddDevice(TDEStorageDevice * sdevice, bool allowNotification) ) { if ((sdevice->checkDiskStatus(TDEDiskDeviceStatus::Removable)) && (!(sdevice->checkDiskStatus(TDEDiskDeviceStatus::Inserted)))) { allowNotification = false; + allowDialogNotification = false; } /* We only list volumes that... @@ -278,7 +292,7 @@ void TDEBackend::AddDevice(TDEStorageDevice * sdevice, bool allowNotification) } } - m_mediaList.addMedium(medium, allowNotification); + m_mediaList.addMedium(medium, allowDialogNotification); kdDebug(1219) << "TDEBackend::AddDevice inserted floppy medium for " << sdevice->uniqueID() << endl; @@ -294,7 +308,7 @@ void TDEBackend::AddDevice(TDEStorageDevice * sdevice, bool allowNotification) // Create medium Medium* medium = new Medium(sdevice->uniqueID(), driveUDIFromDeviceUID(sdevice->uniqueID()), ""); setCameraProperties(medium); - m_mediaList.addMedium(medium, allowNotification); + m_mediaList.addMedium(medium, allowDialogNotification); kdDebug(1219) << "TDEBackend::AddDevice inserted camera medium for " << sdevice->uniqueID() << endl; @@ -728,43 +742,40 @@ void TDEBackend::setVolumeProperties(Medium* medium) diskLabel = i18n("%1 Fixed Disk (%2)").arg(sdevice->deviceFriendlySize(), sdevice->deviceNode()); } - if (sdevice->isDiskOfType(TDEDiskDeviceType::USB)) { + if (sdevice->isDiskOfType(TDEDiskDeviceType::USB) + || sdevice->checkDiskStatus(TDEDiskDeviceStatus::Removable) + || sdevice->checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) { mimeType = "media/removable" + MOUNT_SUFFIX; if (useDefaultLabel) { diskLabel = i18n("%1 Removable Device").arg(sdevice->deviceFriendlySize()); } + } - medium->needMounting(); - - if (sdevice->isDiskOfType(TDEDiskDeviceType::CompactFlash)) { - medium->setIconName("compact_flash" + MOUNT_ICON_SUFFIX); - } - if (sdevice->isDiskOfType(TDEDiskDeviceType::MemoryStick)) { - medium->setIconName("memory_stick" + MOUNT_ICON_SUFFIX); - } - if (sdevice->isDiskOfType(TDEDiskDeviceType::SmartMedia)) { - medium->setIconName("smart_media" + MOUNT_ICON_SUFFIX); - } - if (sdevice->isDiskOfType(TDEDiskDeviceType::SDMMC)) { - medium->setIconName("sd_mmc" + MOUNT_ICON_SUFFIX); - } - if (sdevice->isDiskOfType(TDEDiskDeviceType::MediaDevice)) { - medium->setIconName("ipod" + MOUNT_ICON_SUFFIX); - - if (sdevice->vendorModel().upper().contains("IPOD") && KProtocolInfo::isKnownProtocol( TQString("ipod") ) ) - { - medium->unmountableState( "ipod:/" ); - medium->mountableState(!sdevice->mountPath().isNull()); - } - } - if (sdevice->isDiskOfType(TDEDiskDeviceType::Tape)) { - medium->setIconName("magnetic_tape" + MOUNT_ICON_SUFFIX); - } - if (medium->isMounted() && TQFile::exists(medium->mountPoint() + "/dcim")) - { - mimeType = "media/camera" + MOUNT_SUFFIX; + if (sdevice->isDiskOfType(TDEDiskDeviceType::CompactFlash)) { + medium->setIconName("media-flash-compact_flash" + MOUNTED_ICON_SUFFIX); + } + if (sdevice->isDiskOfType(TDEDiskDeviceType::MemoryStick)) { + medium->setIconName("media-flash-memory_stick" + MOUNTED_ICON_SUFFIX); + } + if (sdevice->isDiskOfType(TDEDiskDeviceType::SmartMedia)) { + medium->setIconName("media-flash-smart_media" + MOUNTED_ICON_SUFFIX); + } + if (sdevice->isDiskOfType(TDEDiskDeviceType::SDMMC)) { + medium->setIconName("media-flash-sd_mmc" + MOUNTED_ICON_SUFFIX); + } + if (sdevice->isDiskOfType(TDEDiskDeviceType::MediaDevice)) { + medium->setIconName("ipod" + MOUNT_ICON_SUFFIX); + if (sdevice->vendorModel().upper().contains("IPOD") && KProtocolInfo::isKnownProtocol( TQString("ipod") ) ) { + medium->unmountableState( "ipod:/" ); + medium->mountableState(!sdevice->mountPath().isNull()); } } + if (sdevice->isDiskOfType(TDEDiskDeviceType::Tape)) { + medium->setIconName("media-tape" + MOUNTED_ICON_SUFFIX); + } + if (medium->isMounted() && TQFile::exists(medium->mountPoint() + "/dcim")) { + mimeType = "media/camera" + MOUNT_SUFFIX; + } } if (!medium->needMounting()) { @@ -1040,16 +1051,17 @@ TQStringList TDEBackend::mountoptions(const TQString &name) if (valids.contains("shortname")) { TQString svalue = config.readEntry("shortname", "lower").lower(); - if (svalue == "winnt") { + // If the user choose 'default', no shortname is added to the mount option list + if (svalue == "windows nt") { result << "shortname=winnt"; } - else if (svalue == "win95") { + else if (svalue == "windows 95") { result << "shortname=win95"; } else if (svalue == "mixed") { result << "shortname=mixed"; } - else { + else if (svalue == "lower"){ result << "shortname=lower"; } } diff --git a/tdeioslave/media/tdecmodule/managermoduleview.ui b/tdeioslave/media/tdecmodule/managermoduleview.ui index 982da7d80..febef70f7 100644 --- a/tdeioslave/media/tdecmodule/managermoduleview.ui +++ b/tdeioslave/media/tdecmodule/managermoduleview.ui @@ -52,6 +52,17 @@ <string>Select this if you want to enable application autostart after mounting a device.</string> </property> </widget> + <widget class="TQCheckBox"> + <property name="name"> + <cstring>kcfg_NotificationPopupsEnabled</cstring> + </property> + <property name="text"> + <string>Enable notification popups</string> + </property> + <property name="whatsThis" stdset="0"> + <string>Deselect this if you do not want action request popups to be generated when devices are plugged in.</string> + </property> + </widget> <widget class="TQGroupBox"> <property name="name"> <cstring>groupbox_mount</cstring> @@ -184,6 +195,9 @@ Some of the options are tristate. Leave them "undefined" to let TDE choose the b <property name="whatsThis" stdset="0"> <string><h2>Defines the behaviour for creation and display of filenames which fit into 8.3 characters. If a long name for a file exists, it will always be preferred display.</h2> +<h3><b>Default</b></h3> +Do not force a short name option at all. + <h3><b>Lower</b></h3> Force the short name to lower case upon display; store a long name when the short name is not all upper case. @@ -246,6 +260,11 @@ Display the short name as is; store a long name when the short name is not all u <widget class="TQComboBox" row="1" column="1"> <item> <property name="text"> + <string>Default</string> + </property> + </item> + <item> + <property name="text"> <string>Lower</string> </property> </item> @@ -330,6 +349,7 @@ Display the short name as is; store a long name when the short name is not all u <tabstop>kcfg_HalBackendEnabled</tabstop> <tabstop>kcfg_CdPollingEnabled</tabstop> <tabstop>kcfg_AutostartEnabled</tabstop> + <tabstop>kcfg_NotificationPopupsEnabled</tabstop> <tabstop>option_automount</tabstop> <tabstop>option_ro</tabstop> <tabstop>option_quiet</tabstop> diff --git a/tdeioslave/smb/CMakeLists.txt b/tdeioslave/smb/CMakeLists.txt index 23cc1f000..c347c997d 100644 --- a/tdeioslave/smb/CMakeLists.txt +++ b/tdeioslave/smb/CMakeLists.txt @@ -21,6 +21,7 @@ include_directories( link_directories( ${TQT_LIBRARY_DIRS} + ${SMBCLIENT_LIBRARY_DIRS} ) diff --git a/tdeioslave/smb/ConfigureChecks.cmake b/tdeioslave/smb/ConfigureChecks.cmake index da4d1a942..08eda7341 100644 --- a/tdeioslave/smb/ConfigureChecks.cmake +++ b/tdeioslave/smb/ConfigureChecks.cmake @@ -18,7 +18,7 @@ endif( ) if( HAVE_LIBSMBCLIENT_H ) set( SMBCLIENT_LIBRARIES smbclient ) - check_library_exists( ${SMBCLIENT_LIBRARIES} smbc_new_context "" HAVE_SMBCLIENT ) + check_library_exists( ${SMBCLIENT_LIBRARIES} smbc_new_context "${SMBCLIENT_LIBRARY_DIRS}" HAVE_SMBCLIENT ) endif( ) if( NOT HAVE_LIBSMBCLIENT_H OR NOT HAVE_SMBCLIENT ) diff --git a/tdeioslave/system/entries/documents.desktop b/tdeioslave/system/entries/documents.desktop index ae651c541..901b217f0 100644 --- a/tdeioslave/system/entries/documents.desktop +++ b/tdeioslave/system/entries/documents.desktop @@ -5,9 +5,9 @@ Icon=folder_man Name=Documents Folder Name[af]=Dokument Gids Name[ar]=مستنداتي -Name[be]=ТÑчка Ð´Ð»Ñ Ð´Ð°ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñž -Name[bg]=Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸ -Name[bn]=ডকà§à¦®à§‡à¦¨à§à¦Ÿ ফোলà§à¦¡à¦¾à¦° +Name[be]=Тэчка для дакументаў +Name[bg]=Директория с документи +Name[bn]=ডকমেনট ফোলডার Name[br]=Renkell an teulioù Name[bs]=Direktorij dokumenata Name[ca]=Carpeta de documents diff --git a/tdeioslave/trash/CMakeLists.txt b/tdeioslave/trash/CMakeLists.txt index 1569d07ca..1082b57af 100644 --- a/tdeioslave/trash/CMakeLists.txt +++ b/tdeioslave/trash/CMakeLists.txt @@ -25,7 +25,7 @@ link_directories( ##### other data ################################ -install( FILES trash.protocol DESTINATION ${SERVICES_INSTALL_DIR} ) +install( FILES ktrashpropsdlgplugin.desktop trash.protocol DESTINATION ${SERVICES_INSTALL_DIR} ) ##### trashcommon (static) ###################### @@ -33,7 +33,7 @@ install( FILES trash.protocol DESTINATION ${SERVICES_INSTALL_DIR} ) set( target trashcommon ) tde_add_library( ${target} STATIC_PIC AUTOMOC - SOURCES trashimpl.cpp + SOURCES trashimpl.cpp discspaceutil.cpp ) @@ -47,6 +47,15 @@ tde_add_kpart( ${target} AUTOMOC DESTINATION ${PLUGIN_INSTALL_DIR} ) +##### ktrashpropsdlgplugin (module) ######################## + +set( target ktrashpropsdlgplugin ) + +tde_add_kpart( ${target} AUTOMOC + SOURCES ktrashpropsdlgplugin.cpp + LINK trashcommon-static tdeio-shared + DESTINATION ${PLUGIN_INSTALL_DIR} +) ##### ktrash (executable) ####################### @@ -57,3 +66,9 @@ tde_add_executable( ${target} LINK tdeio-shared DESTINATION ${BIN_INSTALL_DIR} ) + +##### testtrash (executable) ####################### +tde_add_executable( testtrash + SOURCES testtrash.cpp AUTOMOC + LINK trashcommon-static tdeio-shared +) diff --git a/tdeioslave/trash/Makefile.am b/tdeioslave/trash/Makefile.am index 02b43e90a..ee27b3d2a 100644 --- a/tdeioslave/trash/Makefile.am +++ b/tdeioslave/trash/Makefile.am @@ -3,7 +3,7 @@ METASOURCES = AUTO SUBDIRS = . tdefile-plugin -kde_module_LTLIBRARIES = tdeio_trash.la +kde_module_LTLIBRARIES = tdeio_trash.la ktrashpropsdlgplugin.la tdeio_trash_la_SOURCES = tdeio_trash.cpp tdeio_trash_la_LIBADD = libtrashcommon.la $(LIB_TDEIO) @@ -17,7 +17,7 @@ ktrash_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_TDECORE) $ kde_services_DATA = trash.protocol noinst_LTLIBRARIES = libtrashcommon.la -libtrashcommon_la_SOURCES = trashimpl.cpp +libtrashcommon_la_SOURCES = trashimpl.cpp discspaceutil.cpp check_PROGRAMS = testtrash testtrash_SOURCES = testtrash.cpp @@ -29,3 +29,12 @@ TESTS = testtrash messages: $(XGETTEXT) `find . -name "*.cc" -o -name "*.cpp" -o -name "*.h"` -o $(podir)/tdeio_trash.pot +# ktrashpropsdlgplugin target +noinst_HEADERS = ktrashpropsdlgplugin.h discspaceutil.h trash_constant.h + +ktrashpropsdlgplugin_la_SOURCES = ktrashpropsdlgplugin.cpp discspaceutil.cpp trashimpl.cpp +ktrashpropsdlgplugin_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +ktrashpropsdlgplugin_la_LIBADD = $(LIB_TDEIO) + +services_DATA = ktrashpropsdlgplugin.desktop +servicesdir = $(kde_servicesdir) diff --git a/tdeioslave/trash/discspaceutil.cpp b/tdeioslave/trash/discspaceutil.cpp new file mode 100644 index 000000000..186cb0e7f --- /dev/null +++ b/tdeioslave/trash/discspaceutil.cpp @@ -0,0 +1,112 @@ +/* + This file is part of the TDE project + + Copyright (C) 2008 Tobias Koenig <tokoe@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <tqapplication.h> +#include <tqdir.h> +#include <tqeventloop.h> +#include <tqfileinfo.h> + +#include <kdiskfreesp.h> +#include <kdebug.h> + +#include "discspaceutil.h" + +DiscSpaceUtil::DiscSpaceUtil( const TQString &directory, TQObject *parent ) + : TQObject( parent ), + mDirectory( directory ), + mFullSize( 0 ) +{ + calculateFullSize(); +} + +unsigned long DiscSpaceUtil::sizeOfPath( const TQString &path ) +{ + TQFileInfo info( path ); + if ( !info.exists() ) { + return 0; + } + + if ( info.isFile() ) { + return info.size(); + } else if ( info.isDir() ) { + TQDir dir( path ); + const TQFileInfoList *infos = dir.entryInfoList( TQDir::Files | TQDir::Dirs | TQDir::NoSymLinks ); + TQFileInfoListIterator it( *infos ); + + unsigned long sum = 0; + TQFileInfo *info = 0; + while ( (info = it.current()) != 0 ) { + if ( info->fileName() != "." && info->fileName() != ".." ) + sum += sizeOfPath( info->absFilePath() ); + ++it; + } + + return sum; + } else { + return 0; + } +} + +double DiscSpaceUtil::usage( unsigned long additional ) const +{ + if ( mFullSize == 0 ) + return 0; + + unsigned long sum = sizeOfPath( mDirectory ); + sum += additional; + + sum = sum/1024; // convert to kB + + return (((double)sum*100)/(double)mFullSize); +} + +unsigned long DiscSpaceUtil::size() const +{ + return mFullSize; +} + +TQString DiscSpaceUtil::mountPoint() const +{ + return mMountPoint; +} + +void DiscSpaceUtil::foundMountPoint( const TQString &mountPoint, unsigned long kbSize, unsigned long, unsigned long ) +{ + mFullSize = kbSize; + mMountPoint = mountPoint; +} + +void DiscSpaceUtil::done() +{ + tqApp->eventLoop()->exitLoop(); +} + +void DiscSpaceUtil::calculateFullSize() +{ + KDiskFreeSp *sp = KDiskFreeSp::findUsageInfo( mDirectory ); + connect( sp, TQT_SIGNAL( foundMountPoint( const TQString&, unsigned long, unsigned long, unsigned long ) ), + this, TQT_SLOT( foundMountPoint( const TQString&, unsigned long, unsigned long, unsigned long ) ) ); + connect( sp, TQT_SIGNAL( done() ), this, TQT_SLOT( done() ) ); + + tqApp->eventLoop()->enterLoop(); +} + +#include "discspaceutil.moc" diff --git a/tdeioslave/trash/discspaceutil.h b/tdeioslave/trash/discspaceutil.h new file mode 100644 index 000000000..a00141296 --- /dev/null +++ b/tdeioslave/trash/discspaceutil.h @@ -0,0 +1,81 @@ +/* + This file is part of the TDE project + + Copyright (C) 2008 Tobias Koenig <tokoe@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef DISCSPACEUTIL_H +#define DISCSPACEUTIL_H + +#include <tqobject.h> +#include <tqstring.h> + +/** + * A small utility class to access and calculate + * size and usage of mount points. + */ +class DiscSpaceUtil : public TQObject +{ + Q_OBJECT + + public: + /** + * Creates a new disc space util. + * + * @param directory A directory the util shall work on. + * @param parent The parent object. + */ + explicit DiscSpaceUtil( const TQString &directory, TQObject *parent = 0 ); + + /** + * Returns the usage of the directory pass in the constructor on this + * mount point in percent. + * + * @param additional An additional amount of bytes that is added to the + * directory size before the usage is calculated. + */ + double usage( unsigned long additional = 0 ) const; + + /** + * Returns the size of the partition in kilo bytes. + */ + unsigned long size() const; + + /** + * Returns the mount point of the directory. + */ + TQString mountPoint() const; + + /** + * Returns the size of the given path in bytes. + */ + static unsigned long sizeOfPath( const TQString &path ); + + private slots: + void foundMountPoint( const TQString&, unsigned long, unsigned long, unsigned long ); + void done(); + + private: + void calculateFullSize(); + + TQString mDirectory; + unsigned long mFullSize; + TQString mMountPoint; +}; + +#endif diff --git a/tdeioslave/trash/ktrash.cpp b/tdeioslave/trash/ktrash.cpp index 162d27876..4450156f8 100644 --- a/tdeioslave/trash/ktrash.cpp +++ b/tdeioslave/trash/ktrash.cpp @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2004 David Faure <faure@kde.org> This library is free software; you can redistribute it and/or diff --git a/tdeioslave/trash/ktrashpropsdlgplugin.cpp b/tdeioslave/trash/ktrashpropsdlgplugin.cpp new file mode 100644 index 000000000..87a70ae45 --- /dev/null +++ b/tdeioslave/trash/ktrashpropsdlgplugin.cpp @@ -0,0 +1,449 @@ +/* + This file is part of the TDE project + + Copyright (C) 2008 Tobias Koenig <tokoe@kde.org> + Copyright (C) 2016 Emanoil Kotsev <deloptes@yahoo.com> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "ktrashpropsdlgplugin.h" +#include "discspaceutil.h" +#include "trash_constant.h" +#include "trashimpl.h" + +#include <tqbuttongroup.h> +#include <tqcheckbox.h> +#include <tqcombobox.h> +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqlistbox.h> +#include <tqradiobutton.h> +#include <tqspinbox.h> + +#include <kdesktopfile.h> +#include <kgenericfactory.h> +#include <tdeglobal.h> +#include <kiconloader.h> +#include <tdelocale.h> +#include <knuminput.h> + +#include <kdebug.h> + +using namespace TrashConstant; + +typedef KGenericFactory<KTrashPropsDlgPlugin, KPropertiesDialog> Factory; +K_EXPORT_COMPONENT_FACTORY( ktrashpropsdlgplugin, Factory( "ktrashpropsdlgplugin" ) ) + +KTrashPropsDlgPlugin::KTrashPropsDlgPlugin( KPropertiesDialog *dialog, const char*, const TQStringList& ) + : KPropsDlgPlugin( dialog ) +{ + if ( dialog->items().count() != 1 ) + return; + + KFileItem *item = dialog->items().first(); + + if ( !KPropsDlgPlugin::isDesktopFile( item ) ) + return; + + KDesktopFile deskFile( item->url().path(), true /* readonly */ ); + + if ( deskFile.readURL() != "trash:/" ) + return; + + TDEGlobal::locale()->insertCatalogue( "tdeio_trash" ); + + mTrashImpl = new TrashImpl(); + mTrashImpl->init(); + + readConfig(); + + TQFrame *frame = dialog->addPage( i18n( "Size Limits" ) ); + setupGui( frame ); + + mUseTimeLimit->setChecked( mConfigMap[ mCurrentTrash ].useTimeLimit ); + mUseSizeLimit->setChecked( mConfigMap[ mCurrentTrash ].useSizeLimit ); + mSizeLimitType = mConfigMap[ mCurrentTrash ].sizeLimitType; + if ( mSizeLimitType == SIZE_LIMIT_FIXED ) + { + mRbFixedSize->setChecked( true ); + } + else + { + mRbPercentSize->setChecked( true ); + } + + mDays->setValue( mConfigMap[ mCurrentTrash ].days ); + mPercentSize->setValue( mConfigMap[ mCurrentTrash ].percent ); + mFixedSize->setValue( mConfigMap[ mCurrentTrash ].fixedSize ); + mFixedSizeUnit->setCurrentItem( mConfigMap[ mCurrentTrash ].fixedSizeUnit ); + mLimitReachedAction->setCurrentItem( mConfigMap[ mCurrentTrash ].actionType ); + percentSizeChanged(mPercentSize->value()); + fixedSizeChanged(mFixedSize->value()); + + useTypeChanged(); + + connect( mUseTimeLimit, TQT_SIGNAL( toggled( bool ) ), + this, TQT_SLOT( setDirty() ) ); + connect( mUseTimeLimit, TQT_SIGNAL( toggled( bool ) ), + this, TQT_SLOT( useTypeChanged() ) ); + connect( mDays, TQT_SIGNAL( valueChanged( int ) ), + this, TQT_SLOT( setDirty() ) ); + connect( mUseSizeLimit, TQT_SIGNAL( toggled( bool ) ), + this, TQT_SLOT( setDirty() ) ); + connect( mUseSizeLimit, TQT_SIGNAL( toggled( bool ) ), + this, TQT_SLOT( useTypeChanged() ) ); + connect( mPercentSize, TQT_SIGNAL( valueChanged( double ) ), + this, TQT_SLOT( percentSizeChanged( double ) ) ); + connect( mFixedSize, TQT_SIGNAL( valueChanged( double ) ), + this, TQT_SLOT( fixedSizeChanged( double ) ) ); + connect( mPercentSize, TQT_SIGNAL( valueChanged( double ) ), + this, TQT_SLOT( setDirty() ) ); + connect( mFixedSize, TQT_SIGNAL( valueChanged( double ) ), + this, TQT_SLOT( setDirty() ) ); + connect( mFixedSizeUnit, TQT_SIGNAL( activated( int ) ), + this, TQT_SLOT( fixedSizeUnitActivated( int ) ) ); + connect( mRbPercentSize, TQT_SIGNAL( toggled( bool ) ), + this, TQT_SLOT( rbPercentSizeToggled( bool ) ) ); + connect( mRbPercentSize, TQT_SIGNAL( toggled( bool ) ), + this, TQT_SLOT( setDirty() ) ); + connect( mRbFixedSize, TQT_SIGNAL( toggled( bool ) ), + this, TQT_SLOT( rbFixedSizeToggled( bool ) ) ); + connect( mRbFixedSize, TQT_SIGNAL( toggled( bool ) ), + this, TQT_SLOT( setDirty() ) ); + connect( mLimitReachedAction, TQT_SIGNAL( activated( int ) ), + this, TQT_SLOT( setDirty() ) ); + + trashChanged( 0 ); +} + +KTrashPropsDlgPlugin::~KTrashPropsDlgPlugin() +{ +} + +void KTrashPropsDlgPlugin::setupGui( TQFrame *frame ) +{ + TQVBoxLayout *layout = new TQVBoxLayout( frame, 11, 6 ); + + TrashImpl::TrashDirMap map = mTrashImpl->trashDirectories(); + if ( map.count() != 1 ) { + // If we have multiple trashes, we setup a widget to choose + // which trash to configure + TQListBox *mountPoints = new TQListBox( frame ); + layout->addWidget( mountPoints ); + + const TQPixmap folderPixmap = TDEGlobal::iconLoader()->loadIcon( "folder", TDEIcon::Small ); + TQMapConstIterator<int, TQString> it; + for ( it = map.begin(); it != map.end(); ++it ) { + DiscSpaceUtil util( it.data() ); + mountPoints->insertItem( folderPixmap, util.mountPoint(), it.key() ); + } + + mountPoints->setCurrentItem( 0 ); + + connect( mountPoints, TQT_SIGNAL( highlighted( int ) ), TQT_SLOT( trashChanged( int ) ) ); + } else { + mCurrentTrash = map[0]; + } + + TQHBoxLayout *daysLayout = new TQHBoxLayout( layout ); + + mUseTimeLimit = new TQCheckBox( i18n( "Delete files older than:" ), frame ); + daysLayout->addWidget( mUseTimeLimit ); + mDays = new TQSpinBox( 1, 365, 1, frame ); + mDays->setSuffix( " days" ); + daysLayout->addWidget( mDays ); + + TQGridLayout *sizeLayout = new TQGridLayout( layout, 2, 2 ); + mUseSizeLimit = new TQCheckBox( i18n( "Limit to maximum size" ), frame ); + sizeLayout->addMultiCellWidget( mUseSizeLimit, 0, 0, 0, 1 ); + + mSizeWidget = new TQWidget( frame ); + sizeLayout->setColSpacing( 0, 30 ); + sizeLayout->addWidget( mSizeWidget, 1, 1 ); + + TQGridLayout *sizeWidgetLayout = new TQGridLayout( mSizeWidget, 3, 3, 11, 6 ); + + mRbPercentSize = new TQRadioButton( i18n("&Percentage:"), mSizeWidget ); + mRbFixedSize = new TQRadioButton( i18n("&Fixed size:"), mSizeWidget ); + sizeWidgetLayout->addWidget( mRbPercentSize, 0, 0 ); + sizeWidgetLayout->addWidget( mRbFixedSize, 1, 0 ); + + mPercentSize = new KDoubleSpinBox( 0, 100, 0.1, 10, 2, mSizeWidget ); + mPercentSize->setSuffix( " %" ); + sizeWidgetLayout->addWidget( mPercentSize, 0, 1 ); + mSizeLabel = new TQLabel( mSizeWidget ); + sizeWidgetLayout->addWidget( mSizeLabel, 0, 2 ); + + mFixedSize = new KDoubleSpinBox( 0, 1024*1024, 1, 500, 2, mSizeWidget ); + sizeWidgetLayout->addWidget( mFixedSize, 1, 1 ); + mFixedSizeUnit = new TQComboBox( mSizeWidget ); + mFixedSizeUnit->setEditable( false ); + mFixedSizeUnit->insertItem( i18n( "Bytes" ), SIZE_ID_B ); + mFixedSizeUnit->insertItem( i18n( "KBytes" ), SIZE_ID_KB ); + mFixedSizeUnit->insertItem( i18n( "MBytes" ), SIZE_ID_MB ); + mFixedSizeUnit->insertItem( i18n( "GBytes" ), SIZE_ID_GB ); + mFixedSizeUnit->insertItem( i18n( "TBytes" ), SIZE_ID_TB ); + mFixedSizeUnit->setCurrentItem( 2 ); + sizeWidgetLayout->addWidget( mFixedSizeUnit, 1, 2 ); + + TQLabel *label = new TQLabel( i18n( "When limit reached:" ), mSizeWidget ); + sizeWidgetLayout->addWidget( label, 2, 0 ); + + mLimitReachedAction = new TQComboBox( mSizeWidget ); + mLimitReachedAction->insertItem( i18n( "Warn me" ) ); + mLimitReachedAction->insertItem( i18n( "Delete oldest files from trash" ) ); + mLimitReachedAction->insertItem( i18n( "Delete biggest files from trash" ) ); + sizeWidgetLayout->addMultiCellWidget( mLimitReachedAction, 2, 2, 1, 2 ); + + layout->addStretch(); +} + +void KTrashPropsDlgPlugin::applyChanges() +{ + if ( !mCurrentTrash.isEmpty() ) { + ConfigEntry entry; + entry.useTimeLimit = mUseTimeLimit->isChecked(); + entry.days = mDays->value(); + entry.useSizeLimit = mUseSizeLimit->isChecked(); + if (mRbFixedSize->isChecked()) + { + entry.sizeLimitType = SIZE_LIMIT_FIXED; + } + else + { + entry.sizeLimitType = SIZE_LIMIT_PERCENT; + } + entry.percent = mPercentSize->value(); + entry.fixedSize = mFixedSize->value(); + entry.fixedSizeUnit = mFixedSizeUnit->currentItem(); + entry.actionType = mLimitReachedAction->currentItem(); + mConfigMap.insert( mCurrentTrash, entry ); + } + + writeConfig(); +} + +void KTrashPropsDlgPlugin::percentSizeChanged( double percent ) +{ + DiscSpaceUtil util( mCurrentTrash ); + double partitionSize = util.size() * 1024.0; // convert to byte + double size = partitionSize*(percent/100.0); + + TQString unit = i18n( "Bytes" ); + if ( size >= 1024 ) { + unit = i18n( "KBytes" ); + size = size/1024.0; + } + if ( size >= 1024 ) { + unit = i18n( "MBytes" ); + size = size/1024.0; + } + if ( size >= 1024 ) { + unit = i18n( "GBytes" ); + size = size/1024.0; + } + if ( size >= 1024 ) { + unit = i18n( "TBytes" ); + size = size/1024.0; + } + + mSizeLabel->setText( i18n( "(%1 %2)" ).arg( TQString::number( size, 'f', 2 ) ).arg( unit ) ); +} + +void KTrashPropsDlgPlugin::fixedSizeChanged( double value ) +{ + int currItem = mFixedSizeUnit->currentItem(); + if (value > 1023.999 && currItem >= SIZE_ID_TB) + { + // Max limit 1024 TBytes + mFixedSizeUnit->setCurrentItem(SIZE_ID_TB); + mFixedSize->setValue(1024.0); + } + else if (value > 1023.999 && currItem < SIZE_ID_TB) + { + // Scale up to higher measure unit + while (value > 1023.999 && currItem < SIZE_ID_TB) + { + ++currItem; + value /= 1024.0; + } + mFixedSizeUnit->setCurrentItem(currItem); + mFixedSize->setValue(value); + } + else if (value < 0.001) + { + // Scale down to lower measure unit + int currItem = mFixedSizeUnit->currentItem(); + if (currItem > SIZE_ID_B) + { + mFixedSizeUnit->setCurrentItem(currItem - 1); + mFixedSize->setValue(1023.0); + } + } + // Need to call this manually because "activated" is not emitted by "mFixedSizeUnit" + // when the index is changed programmatically (see TQComboBox API docs) + fixedSizeUnitActivated(mFixedSizeUnit->currentItem()); +} + +void KTrashPropsDlgPlugin::fixedSizeUnitActivated(int index) +{ + // Bytes can not be split into fractions + if (index == SIZE_ID_B) + { + mFixedSize->setPrecision(0); + } + else + { + mFixedSize->setPrecision(2); + } +} + +void KTrashPropsDlgPlugin::rbPercentSizeToggled( bool buttonOn) +{ + if (buttonOn) + { + mRbFixedSize->setChecked(false); + mSizeLimitType = SIZE_LIMIT_PERCENT; + } + else if (!mRbFixedSize->isChecked()) + { + // Set the button back on if the user clicked it twice + mRbPercentSize->setChecked(true); + } +} + +void KTrashPropsDlgPlugin::rbFixedSizeToggled( bool buttonOn) +{ + if (buttonOn) + { + mRbPercentSize->setChecked(false); + mSizeLimitType = SIZE_LIMIT_FIXED; + } + else if (!mRbPercentSize->isChecked()) + { + // Set the button back on if the user clicked it twice + mRbFixedSize->setChecked(true); + } +} + +void KTrashPropsDlgPlugin::trashChanged( int value ) +{ + const TrashImpl::TrashDirMap map = mTrashImpl->trashDirectories(); + + if ( !mCurrentTrash.isEmpty() ) { + ConfigEntry entry; + entry.useTimeLimit = mUseTimeLimit->isChecked(); + entry.days = mDays->value(); + entry.useSizeLimit = mUseSizeLimit->isChecked(); + entry.sizeLimitType = mSizeLimitType; + entry.percent = mPercentSize->value(), + entry.fixedSize = mFixedSize->value(); + entry.fixedSizeUnit = mFixedSizeUnit->currentItem(); + entry.actionType = mLimitReachedAction->currentItem(); + mConfigMap.insert( mCurrentTrash, entry ); + } + + mCurrentTrash = map[ value ]; + + if ( mConfigMap.contains( mCurrentTrash ) ) { + const ConfigEntry entry = mConfigMap[ mCurrentTrash ]; + mUseTimeLimit->setChecked( entry.useTimeLimit ); + mDays->setValue( entry.days ); + mUseSizeLimit->setChecked( entry.useSizeLimit ); + if ( mSizeLimitType == SIZE_LIMIT_FIXED ) + { + mRbFixedSize->setChecked( true ); + } + else + { + mRbPercentSize->setChecked( true ); + } + mPercentSize->setValue( entry.percent ); + mFixedSize->setValue( entry.fixedSize ); + mFixedSizeUnit->setCurrentItem( entry.fixedSizeUnit ); + mLimitReachedAction->setCurrentItem( entry.actionType ); + } else { + mUseTimeLimit->setChecked( false ); + mDays->setValue( 7 ); + mUseSizeLimit->setChecked( true ); + mRbPercentSize->setChecked( true ); + mPercentSize->setValue( 10.0 ); + mFixedSize->setValue( 500 ); + mFixedSizeUnit->setCurrentItem( SIZE_ID_MB ); + mLimitReachedAction->setCurrentItem( 0 ); + } + + percentSizeChanged( mPercentSize->value() ); + fixedSizeChanged( mFixedSize->value() ); +} + +void KTrashPropsDlgPlugin::useTypeChanged() +{ + mDays->setEnabled( mUseTimeLimit->isChecked() ); + mSizeWidget->setEnabled( mUseSizeLimit->isChecked() ); +} + +void KTrashPropsDlgPlugin::readConfig() +{ + TDEConfig config( "trashrc" ); + mConfigMap.clear(); + + const TQStringList groups = config.groupList(); + for ( uint i = 0; i < groups.count(); ++i ) { + if ( groups[ i ].startsWith( "/" ) ) { + config.setGroup( groups[ i ] ); + ConfigEntry entry; + entry.useTimeLimit = config.readBoolEntry( "UseTimeLimit", false ); + entry.days = config.readNumEntry( "Days", 7 ); + entry.useSizeLimit = config.readBoolEntry( "UseSizeLimit", true ); + entry.sizeLimitType = config.readNumEntry( "SizeLimitType", SIZE_LIMIT_PERCENT ); + entry.percent = config.readDoubleNumEntry( "Percent", 10 ); + entry.fixedSize = config.readDoubleNumEntry( "FixedSize", 500 ); + entry.fixedSizeUnit = config.readNumEntry( "FixedSizeUnit", SIZE_ID_MB ); + entry.actionType = config.readNumEntry( "LimitReachedAction", 0 ); + mConfigMap.insert( groups[ i ], entry ); + } + } +} + +void KTrashPropsDlgPlugin::writeConfig() +{ + TDEConfig config( "trashrc" ); + + // first delete all existing groups + const TQStringList groups = config.groupList(); + for ( uint i = 0; i < groups.count(); ++i ) + if ( groups[ i ].startsWith( "/" ) ) + config.deleteGroup( groups[ i ] ); + + TQMapConstIterator<TQString, ConfigEntry> it; + for ( it = mConfigMap.begin(); it != mConfigMap.end(); ++it ) { + config.setGroup( it.key() ); + config.writeEntry( "UseTimeLimit", it.data().useTimeLimit ); + config.writeEntry( "Days", it.data().days ); + config.writeEntry( "UseSizeLimit", it.data().useSizeLimit ); + config.writeEntry( "SizeLimitType", it.data().sizeLimitType ); + config.writeEntry( "Percent", it.data().percent ); + config.writeEntry( "FixedSize", it.data().fixedSize ); + config.writeEntry( "FixedSizeUnit", it.data().fixedSizeUnit ); + config.writeEntry( "LimitReachedAction", it.data().actionType ); + } + + config.sync(); +} + +#include "ktrashpropsdlgplugin.moc" diff --git a/tdeioslave/trash/ktrashpropsdlgplugin.desktop b/tdeioslave/trash/ktrashpropsdlgplugin.desktop new file mode 100644 index 000000000..39782d602 --- /dev/null +++ b/tdeioslave/trash/ktrashpropsdlgplugin.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Service +Name=Trash Properties Page +Name[bg]=Свойства на кошчето +Name[it]=Proprietà del cestino +X-TDE-Library=ktrashpropsdlgplugin +X-TDE-ServiceTypes=KPropsDlg/Plugin,media/builtin-trash diff --git a/tdeioslave/trash/ktrashpropsdlgplugin.h b/tdeioslave/trash/ktrashpropsdlgplugin.h new file mode 100644 index 000000000..d21dd4578 --- /dev/null +++ b/tdeioslave/trash/ktrashpropsdlgplugin.h @@ -0,0 +1,90 @@ +/* + This file is part of the TDE project + + Copyright (C) 2008 Tobias Koenig <tokoe@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef KTRASHPROPSDLGPLUGIN_H +#define KTRASHPROPSDLGPLUGIN_H + +#include "kpropertiesdialog.h" + +class KDoubleSpinBox; +class TQCheckBox; +class TQComboBox; +class TQFrame; +class TQLabel; +class TQRadioButton; +class TQSpinBox; +class TrashImpl; + +class KTrashPropsDlgPlugin : public KPropsDlgPlugin +{ + Q_OBJECT + + public: + KTrashPropsDlgPlugin( KPropertiesDialog *dialog, const char*, const TQStringList& ); + ~KTrashPropsDlgPlugin(); + + virtual void applyChanges(); + + private slots: + void percentSizeChanged( double ); + void fixedSizeChanged( double ); + void fixedSizeUnitActivated ( int ); + void rbPercentSizeToggled( bool ); + void rbFixedSizeToggled( bool ); + void trashChanged( int ); + void useTypeChanged(); + + private: + void readConfig(); + void writeConfig(); + void setupGui( TQFrame *frame ); + + TQCheckBox *mUseTimeLimit; + TQSpinBox *mDays; + TQCheckBox *mUseSizeLimit; + int mSizeLimitType; + TQWidget *mSizeWidget; + TQRadioButton *mRbPercentSize, *mRbFixedSize; + KDoubleSpinBox *mPercentSize; + KDoubleSpinBox *mFixedSize; + TQComboBox *mFixedSizeUnit; + TQLabel *mSizeLabel; + TQComboBox *mLimitReachedAction; + + TrashImpl *mTrashImpl; + TQString mCurrentTrash; + + typedef struct { + bool useTimeLimit; + int days; + bool useSizeLimit; + int sizeLimitType; + double percent; + double fixedSize; + int fixedSizeUnit; + int actionType; + } ConfigEntry; + + typedef TQMap<TQString, ConfigEntry> ConfigMap; + ConfigMap mConfigMap; +}; + +#endif diff --git a/tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp b/tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp index 983a09db2..e7bfdc280 100644 --- a/tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp +++ b/tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project * Copyright (C) 2004 David Faure <faure@kde.org> * Based on tdefile_txt.cpp by Nadeem Hasan <nhasan@kde.org> * @@ -51,9 +51,8 @@ void KTrashPlugin::makeMimeTypeInfo(const TQString& mimeType) KFileMimeTypeInfo::GroupInfo* group = addGroupInfo(info, "General", i18n("General")); - KFileMimeTypeInfo::ItemInfo* item; - item = addItemInfo(group, "OriginalPath", i18n("Original Path"), TQVariant::String); - item = addItemInfo(group, "DateOfDeletion", i18n("Date of Deletion"), TQVariant::DateTime); + addItemInfo(group, "OriginalPath", i18n("Original Path"), TQVariant::String); + addItemInfo(group, "DateOfDeletion", i18n("Date of Deletion"), TQVariant::DateTime); } bool KTrashPlugin::readInfo(KFileMetaInfo& info, uint) diff --git a/tdeioslave/trash/tdefile-plugin/tdefile_trash.h b/tdeioslave/trash/tdefile-plugin/tdefile_trash.h index 71e4f2bff..fbd6c9e3d 100644 --- a/tdeioslave/trash/tdefile-plugin/tdefile_trash.h +++ b/tdeioslave/trash/tdefile-plugin/tdefile_trash.h @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project * Copyright (C) 2004 David Faure <faure@kde.org> * Based on tdefile_txt.h by Nadeem Hasan <nhasan@kde.org> * diff --git a/tdeioslave/trash/tdeio_trash.cpp b/tdeioslave/trash/tdeio_trash.cpp index e8fdec8f5..90431afd5 100644 --- a/tdeioslave/trash/tdeio_trash.cpp +++ b/tdeioslave/trash/tdeio_trash.cpp @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2004 David Faure <faure@kde.org> This library is free software; you can redistribute it and/or diff --git a/tdeioslave/trash/tdeio_trash.h b/tdeioslave/trash/tdeio_trash.h index 954dbe7a6..964e05f9a 100644 --- a/tdeioslave/trash/tdeio_trash.h +++ b/tdeioslave/trash/tdeio_trash.h @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2004 David Faure <faure@kde.org> This library is free software; you can redistribute it and/or @@ -22,6 +22,7 @@ #include <tdeio/slavebase.h> #include "trashimpl.h" + namespace TDEIO { class Job; } typedef TrashImpl::TrashedFileInfo TrashedFileInfo; diff --git a/tdeioslave/trash/testtrash.cpp b/tdeioslave/trash/testtrash.cpp index db2e73fb3..60fe2d1a6 100644 --- a/tdeioslave/trash/testtrash.cpp +++ b/tdeioslave/trash/testtrash.cpp @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2004 David Faure <faure@kde.org> This library is free software; you can redistribute it and/or @@ -24,8 +24,6 @@ #include "tdeio_trash.h" #include "testtrash.h" -#include <config.h> - #include <kurl.h> #include <tdelocale.h> #include <tdeapplication.h> diff --git a/tdeioslave/trash/testtrash.h b/tdeioslave/trash/testtrash.h index ebc217aac..e87b9c3a0 100644 --- a/tdeioslave/trash/testtrash.h +++ b/tdeioslave/trash/testtrash.h @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2004 David Faure <faure@kde.org> This library is free software; you can redistribute it and/or diff --git a/tdeioslave/trash/trash.protocol b/tdeioslave/trash/trash.protocol index ba3fd5dc7..e1029d038 100644 --- a/tdeioslave/trash/trash.protocol +++ b/tdeioslave/trash/trash.protocol @@ -86,4 +86,4 @@ ExtraNames[vi]=Đường dẫn Trước khi vứt,Ngày Vứt ExtraNames[wa]=Oridjinå tchmin,Date di disfaçaedje ExtraNames[zh_CN]=原始路径,删除日期 ExtraNames[zh_TW]=原始路徑,刪除日期 -ExtraTypes=QString,QDateTime +ExtraTypes=TQString,TQDateTime diff --git a/tdeioslave/trash/trash_constant.h b/tdeioslave/trash/trash_constant.h new file mode 100644 index 000000000..aab42b3aa --- /dev/null +++ b/tdeioslave/trash/trash_constant.h @@ -0,0 +1,41 @@ +/* This file is part of the TDE project + Copyright (C) 2016 Michele Calgaro <michele__DOT__calgaro__AT__yahoo__DOT__it + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef TRASH_CONSTANT_H +#define TRASH_CONSTANT_H + +namespace TrashConstant +{ + enum + { + SIZE_LIMIT_PERCENT = 0, + SIZE_LIMIT_FIXED = 1, + }; + + enum + { + SIZE_ID_B = 0, + SIZE_ID_KB = 1, + SIZE_ID_MB = 2, + SIZE_ID_GB = 3, + SIZE_ID_TB = 4 + }; +} + +#endif diff --git a/tdeioslave/trash/trashimpl.cpp b/tdeioslave/trash/trashimpl.cpp index c96d15d3a..6de7edd2a 100644 --- a/tdeioslave/trash/trashimpl.cpp +++ b/tdeioslave/trash/trashimpl.cpp @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2004 David Faure <faure@kde.org> This library is free software; you can redistribute it and/or @@ -18,9 +18,10 @@ */ #include "trashimpl.h" +#include "discspaceutil.h" + #include <tdelocale.h> #include <klargefile.h> -#include <tdeio/global.h> #include <tdeio/renamedlg.h> #include <tdeio/job.h> #include <kdebug.h> @@ -33,8 +34,6 @@ #include <tdefileitem.h> #include <tdeio/chmodjob.h> -#include <dcopref.h> - #include <tqapplication.h> #include <tqeventloop.h> #include <tqfile.h> @@ -49,6 +48,8 @@ #include <stdlib.h> #include <errno.h> +#include "trash_constant.h" + TrashImpl::TrashImpl() : TQObject(), m_lastErrorCode( 0 ), @@ -322,6 +323,9 @@ bool TrashImpl::deleteInfo( int trashId, const TQString& fileId ) bool TrashImpl::moveToTrash( const TQString& origPath, int trashId, const TQString& fileId ) { kdDebug() << k_funcinfo << endl; + if ( !adaptTrashSize( origPath, trashId ) ) + return false; + const TQString dest = filesPath( trashId, fileId ); if ( !move( origPath, dest ) ) { // Maybe the move failed due to no permissions to delete source. @@ -387,6 +391,9 @@ void TrashImpl::jobFinished(TDEIO::Job* job) bool TrashImpl::copyToTrash( const TQString& origPath, int trashId, const TQString& fileId ) { kdDebug() << k_funcinfo << endl; + if ( !adaptTrashSize( origPath, trashId ) ) + return false; + const TQString dest = filesPath( trashId, fileId ); if ( !copy( origPath, dest ) ) return false; @@ -959,4 +966,91 @@ bool TrashImpl::parseURL( const KURL& url, int& trashId, TQString& fileId, TQStr return true; } +bool TrashImpl::adaptTrashSize( const TQString& origPath, int trashId ) +{ + TDEConfig config( "trashrc" ); + + const TQString trashPath = trashDirectoryPath( trashId ); + config.setGroup( trashPath ); + + bool useTimeLimit = config.readBoolEntry( "UseTimeLimit", false ); + bool useSizeLimit = config.readBoolEntry( "UseSizeLimit", true ); + int sizeLimitType = config.readNumEntry( "SizeLimitType", TrashConstant::SIZE_LIMIT_PERCENT ); + double percent = config.readDoubleNumEntry( "Percent", 10 ); + double fixedSize = config.readDoubleNumEntry( "FixedSize", 500 ); + int fixedSizeUnit = config.readNumEntry( "FixedSizeUnit", TrashConstant::SIZE_ID_MB ); + int actionType = config.readNumEntry( "LimitReachedAction", 0 ); + + if ( useTimeLimit ) { // delete all files in trash older than X days + const int maxDays = config.readNumEntry( "Days", 7 ); + const TQDateTime currentDate = TQDateTime::currentDateTime(); + + const TrashedFileInfoList trashedFiles = list(); + for ( uint i = 0; i < trashedFiles.count(); ++i ) { + struct TrashedFileInfo info = trashedFiles[ i ]; + if ( info.trashId != trashId ) + continue; + + if ( info.deletionDate.daysTo( currentDate ) > maxDays ) + del( info.trashId, info.fileId ); + } + + return true; + + } + + if ( useSizeLimit ) { // check if size limit exceeded + // calculate size of the files to be put into the trash + unsigned long additionalSize = DiscSpaceUtil::sizeOfPath( origPath ); + TQString trashPathName = trashPath + "/files/"; + DiscSpaceUtil util( trashPathName ); + unsigned long requiredTrashSpace = util.sizeOfPath(trashPathName) + additionalSize; + unsigned long trashLimit = 0; + if ( sizeLimitType == TrashConstant::SIZE_LIMIT_PERCENT) + { + trashLimit = (unsigned long)(1024 * percent * util.size() / 100.0); + } + else if ( sizeLimitType == TrashConstant::SIZE_LIMIT_FIXED) + { + double trashLimitTemp = fixedSize; + while (fixedSizeUnit > TrashConstant::SIZE_ID_B) + { + trashLimitTemp *= 1024; + --fixedSizeUnit; + } + trashLimit = (unsigned long)trashLimitTemp; + } + if ( requiredTrashSpace > trashLimit ) { + if ( actionType == 0 ) { // warn the user only + m_lastErrorCode = TDEIO::ERR_SLAVE_DEFINED; + m_lastErrorMessage = i18n( "The trash has reached its maximum size!\nClean the trash manually." ); + return false; + } else { + TQDir dir( trashPath + "/files" ); + const TQFileInfoList *infos = 0; + if ( actionType == 1 ) // delete oldest files first + infos = dir.entryInfoList( TQDir::Files | TQDir::Dirs, TQDir::Time | TQDir::Reversed ); + else if ( actionType == 2 ) // delete biggest files first + infos = dir.entryInfoList( TQDir::Files | TQDir::Dirs, TQDir::Size ); + else + tqWarning( "Should never happen!" ); + + TQFileInfoListIterator it( *infos ); + TQFileInfo *info; + bool deleteFurther = true; + while ( ((info = it.current()) != 0) && deleteFurther ) { + if ( info->fileName() != "." && info->fileName() != ".." ) { + del( trashId, info->fileName() ); // delete trashed file + if ( (util.sizeOfPath(trashPathName) + additionalSize) < trashLimit ) // check whether we have enough space now + deleteFurther = false; + } + ++it; + } + } + } + } + + return true; +} + #include "trashimpl.moc" diff --git a/tdeioslave/trash/trashimpl.h b/tdeioslave/trash/trashimpl.h index 3a06dd9e8..6e7af2bad 100644 --- a/tdeioslave/trash/trashimpl.h +++ b/tdeioslave/trash/trashimpl.h @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2004 David Faure <faure@kde.org> This library is free software; you can redistribute it and/or @@ -25,9 +25,6 @@ #include <tqstring.h> #include <tqdatetime.h> -#include <tqmap.h> -#include <tqvaluelist.h> -#include <tqstrlist.h> #include <assert.h> /** @@ -123,6 +120,8 @@ private: void fileAdded(); void fileRemoved(); + bool adaptTrashSize( const TQString& origPath, int trashId ); + // Warning, returns error code, not a bool int testDir( const TQString& name ) const; void error( int e, const TQString& s ); diff --git a/tdekbdledsync/main.cpp b/tdekbdledsync/main.cpp index a439ebd41..1dbf7ef73 100644 --- a/tdekbdledsync/main.cpp +++ b/tdekbdledsync/main.cpp @@ -193,11 +193,16 @@ unsigned int xkb_mask_modifier(XkbDescPtr xkb, const char *name) { } for( i = 0; i < XkbNumVirtualMods; i++ ) { char* modStr = XGetAtomName( xkb->dpy, xkb->names->vmods[i] ); - if( modStr != NULL && strcmp(name, modStr) == 0 ) { + if( modStr == NULL ) { + continue; + } + if( strcmp(name, modStr) == 0 ) { unsigned int mask; XkbVirtualModsToReal( xkb, 1 << i, &mask ); + XFree(modStr); return mask; } + XFree(modStr); } return 0; } @@ -404,14 +409,12 @@ int main() { if (x11_vt_num == vtstat.v_active) { // Get Virtual Core keyboard status - if (XkbGetIndicatorState(display, XkbUseCoreKbd, &states) != Success) { + if (XkbGetState(display, XkbUseCoreKbd, &state) != Success) { fprintf(stderr, "[tdekbdledsync] Unable to query X11 Virtual Core keyboard!\n"); releaseLock(lockfd, lockFileName); return -7; } - XkbGetState(display, XkbUseCoreKbd, &state); - caps_lock_set = (state.mods & caps_lock_mask); num_lock_set = (state.mods & num_lock_mask); scroll_lock_set = (state.mods & scroll_lock_mask); @@ -440,6 +443,11 @@ int main() { } } } + else { + // Ensure the X server is still alive + // If the X server has terminated, this will fail and the program will terminate + XSync(display, False); + } // Check the hotplug monitoring process to see if any keyboards were added or removed fd_set readfds; @@ -459,11 +467,15 @@ int main() { else { dev = udev_monitor_receive_device(mon); if (dev) { + int reload_keyboards = 0; if (strcmp(udev_device_get_action(dev), "add") == 0) { - // Reload keyboards - break; + reload_keyboards = 1; } if (strcmp(udev_device_get_action(dev), "remove") == 0) { + reload_keyboards = 1; + } + udev_device_unref(dev); + if( reload_keyboards ) { // Reload keyboards break; } @@ -499,5 +511,7 @@ int main() { } releaseLock(lockfd, lockFileName); + udev_monitor_unref(mon); + udev_unref(udev); return 0; } diff --git a/tdepasswd/kcm/pics/Apple.png b/tdepasswd/kcm/pics/Apple.png Binary files differindex b383578bb..f4687b24c 100644 --- a/tdepasswd/kcm/pics/Apple.png +++ b/tdepasswd/kcm/pics/Apple.png diff --git a/tdepasswd/kcm/pics/BeachBall.png b/tdepasswd/kcm/pics/BeachBall.png Binary files differindex e8c748332..6cf8e8eae 100644 --- a/tdepasswd/kcm/pics/BeachBall.png +++ b/tdepasswd/kcm/pics/BeachBall.png diff --git a/tdepasswd/kcm/pics/Blowfish.png b/tdepasswd/kcm/pics/Blowfish.png Binary files differindex 51cb16013..1dce016fc 100644 --- a/tdepasswd/kcm/pics/Blowfish.png +++ b/tdepasswd/kcm/pics/Blowfish.png diff --git a/tdepasswd/kcm/pics/Bug.png b/tdepasswd/kcm/pics/Bug.png Binary files differindex b431cc138..d9172626c 100644 --- a/tdepasswd/kcm/pics/Bug.png +++ b/tdepasswd/kcm/pics/Bug.png diff --git a/tdepasswd/kcm/pics/Butterfly.png b/tdepasswd/kcm/pics/Butterfly.png Binary files differindex 88012a7ed..32d944dd8 100644 --- a/tdepasswd/kcm/pics/Butterfly.png +++ b/tdepasswd/kcm/pics/Butterfly.png diff --git a/tdepasswd/kcm/pics/Car.png b/tdepasswd/kcm/pics/Car.png Binary files differindex 95ec0278f..92693035d 100644 --- a/tdepasswd/kcm/pics/Car.png +++ b/tdepasswd/kcm/pics/Car.png diff --git a/tdepasswd/kcm/pics/Cow.png b/tdepasswd/kcm/pics/Cow.png Binary files differindex 2f0ced863..a2feb5355 100644 --- a/tdepasswd/kcm/pics/Cow.png +++ b/tdepasswd/kcm/pics/Cow.png diff --git a/tdepasswd/kcm/pics/Daemon.png b/tdepasswd/kcm/pics/Daemon.png Binary files differindex 4bbc42a55..ae24f104f 100644 --- a/tdepasswd/kcm/pics/Daemon.png +++ b/tdepasswd/kcm/pics/Daemon.png diff --git a/tdepasswd/kcm/pics/Dog.png b/tdepasswd/kcm/pics/Dog.png Binary files differindex 78de93340..c68ae7193 100644 --- a/tdepasswd/kcm/pics/Dog.png +++ b/tdepasswd/kcm/pics/Dog.png diff --git a/tdepasswd/kcm/pics/Elephant.png b/tdepasswd/kcm/pics/Elephant.png Binary files differindex 8f4b2d2aa..d7917a298 100644 --- a/tdepasswd/kcm/pics/Elephant.png +++ b/tdepasswd/kcm/pics/Elephant.png diff --git a/tdepasswd/kcm/pics/Flower.png b/tdepasswd/kcm/pics/Flower.png Binary files differindex d414e736c..770fe21ed 100644 --- a/tdepasswd/kcm/pics/Flower.png +++ b/tdepasswd/kcm/pics/Flower.png diff --git a/tdepasswd/kcm/pics/Frog.png b/tdepasswd/kcm/pics/Frog.png Binary files differindex 2186975a9..da9b72786 100644 --- a/tdepasswd/kcm/pics/Frog.png +++ b/tdepasswd/kcm/pics/Frog.png diff --git a/tdepasswd/kcm/pics/Ghost.png b/tdepasswd/kcm/pics/Ghost.png Binary files differindex bf95150da..d60c7e0f8 100644 --- a/tdepasswd/kcm/pics/Ghost.png +++ b/tdepasswd/kcm/pics/Ghost.png diff --git a/tdepasswd/kcm/pics/Guitar.png b/tdepasswd/kcm/pics/Guitar.png Binary files differindex 6a315b0c7..56d46f2bd 100644 --- a/tdepasswd/kcm/pics/Guitar.png +++ b/tdepasswd/kcm/pics/Guitar.png diff --git a/tdepasswd/kcm/pics/Heart.png b/tdepasswd/kcm/pics/Heart.png Binary files differindex b41a027e3..94c4a4c7e 100644 --- a/tdepasswd/kcm/pics/Heart.png +++ b/tdepasswd/kcm/pics/Heart.png diff --git a/tdepasswd/kcm/pics/Konqui.png b/tdepasswd/kcm/pics/Konqui.png Binary files differindex 4db7ae5e3..f9ec70a14 100644 --- a/tdepasswd/kcm/pics/Konqui.png +++ b/tdepasswd/kcm/pics/Konqui.png diff --git a/tdepasswd/kcm/pics/Lion.png b/tdepasswd/kcm/pics/Lion.png Binary files differindex 373b3f8c8..51bd5ac78 100644 --- a/tdepasswd/kcm/pics/Lion.png +++ b/tdepasswd/kcm/pics/Lion.png diff --git a/tdepasswd/kcm/pics/Monkey.png b/tdepasswd/kcm/pics/Monkey.png Binary files differindex 72a241006..ab32bd55a 100644 --- a/tdepasswd/kcm/pics/Monkey.png +++ b/tdepasswd/kcm/pics/Monkey.png diff --git a/tdepasswd/kcm/pics/Penguin.png b/tdepasswd/kcm/pics/Penguin.png Binary files differindex 33ed3619a..7d4f13493 100644 --- a/tdepasswd/kcm/pics/Penguin.png +++ b/tdepasswd/kcm/pics/Penguin.png diff --git a/tdepasswd/kcm/pics/Pig.png b/tdepasswd/kcm/pics/Pig.png Binary files differindex c10a34c7f..cf409af7a 100644 --- a/tdepasswd/kcm/pics/Pig.png +++ b/tdepasswd/kcm/pics/Pig.png diff --git a/tdepasswd/kcm/pics/Rabbit.png b/tdepasswd/kcm/pics/Rabbit.png Binary files differindex a7c5f3f10..8341fdd0a 100644 --- a/tdepasswd/kcm/pics/Rabbit.png +++ b/tdepasswd/kcm/pics/Rabbit.png diff --git a/tdepasswd/kcm/pics/Ring.png b/tdepasswd/kcm/pics/Ring.png Binary files differindex 29daf4c63..82e94c7fe 100644 --- a/tdepasswd/kcm/pics/Ring.png +++ b/tdepasswd/kcm/pics/Ring.png diff --git a/tdepasswd/kcm/pics/Scream.png b/tdepasswd/kcm/pics/Scream.png Binary files differindex 46abbd2f8..6706872f0 100644 --- a/tdepasswd/kcm/pics/Scream.png +++ b/tdepasswd/kcm/pics/Scream.png diff --git a/tdepasswd/kcm/pics/Shark.png b/tdepasswd/kcm/pics/Shark.png Binary files differindex a11a352cb..2f2c6a325 100644 --- a/tdepasswd/kcm/pics/Shark.png +++ b/tdepasswd/kcm/pics/Shark.png diff --git a/tdepasswd/kcm/pics/Splash.png b/tdepasswd/kcm/pics/Splash.png Binary files differindex ec8e68a18..131f4bf89 100644 --- a/tdepasswd/kcm/pics/Splash.png +++ b/tdepasswd/kcm/pics/Splash.png diff --git a/tdepasswd/kcm/pics/Star.png b/tdepasswd/kcm/pics/Star.png Binary files differindex 2b3988860..ac692c0cf 100644 --- a/tdepasswd/kcm/pics/Star.png +++ b/tdepasswd/kcm/pics/Star.png diff --git a/tdepasswd/kcm/pics/Teddybear.png b/tdepasswd/kcm/pics/Teddybear.png Binary files differindex 823adb56d..41440e4a7 100644 --- a/tdepasswd/kcm/pics/Teddybear.png +++ b/tdepasswd/kcm/pics/Teddybear.png diff --git a/tdepasswd/kcm/pics/Turtle.png b/tdepasswd/kcm/pics/Turtle.png Binary files differindex 1eee29591..f7cd01f86 100644 --- a/tdepasswd/kcm/pics/Turtle.png +++ b/tdepasswd/kcm/pics/Turtle.png diff --git a/tdeprint/kjobviewer/hi128-app-kjobviewer.png b/tdeprint/kjobviewer/hi128-app-kjobviewer.png Binary files differindex 7db5f56b1..624a7556f 100644 --- a/tdeprint/kjobviewer/hi128-app-kjobviewer.png +++ b/tdeprint/kjobviewer/hi128-app-kjobviewer.png diff --git a/tdeprint/kjobviewer/hi16-app-kjobviewer.png b/tdeprint/kjobviewer/hi16-app-kjobviewer.png Binary files differindex d6defce21..64b7b9c6a 100644 --- a/tdeprint/kjobviewer/hi16-app-kjobviewer.png +++ b/tdeprint/kjobviewer/hi16-app-kjobviewer.png diff --git a/tdeprint/kjobviewer/hi22-app-kjobviewer.png b/tdeprint/kjobviewer/hi22-app-kjobviewer.png Binary files differindex a71ee2817..507cbec7d 100644 --- a/tdeprint/kjobviewer/hi22-app-kjobviewer.png +++ b/tdeprint/kjobviewer/hi22-app-kjobviewer.png diff --git a/tdeprint/kjobviewer/hi32-app-kjobviewer.png b/tdeprint/kjobviewer/hi32-app-kjobviewer.png Binary files differindex d554b554f..7ac6f627f 100644 --- a/tdeprint/kjobviewer/hi32-app-kjobviewer.png +++ b/tdeprint/kjobviewer/hi32-app-kjobviewer.png diff --git a/tdeprint/kjobviewer/hi48-app-kjobviewer.png b/tdeprint/kjobviewer/hi48-app-kjobviewer.png Binary files differindex 13adbd006..9b4410d31 100644 --- a/tdeprint/kjobviewer/hi48-app-kjobviewer.png +++ b/tdeprint/kjobviewer/hi48-app-kjobviewer.png diff --git a/tdeprint/kjobviewer/hi64-app-kjobviewer.png b/tdeprint/kjobviewer/hi64-app-kjobviewer.png Binary files differindex 5d22d215e..b8642f5bd 100644 --- a/tdeprint/kjobviewer/hi64-app-kjobviewer.png +++ b/tdeprint/kjobviewer/hi64-app-kjobviewer.png diff --git a/tdeprint/printmgr/hi128-app-printmgr.png b/tdeprint/printmgr/hi128-app-printmgr.png Binary files differindex 7db5f56b1..624a7556f 100644 --- a/tdeprint/printmgr/hi128-app-printmgr.png +++ b/tdeprint/printmgr/hi128-app-printmgr.png diff --git a/tdeprint/printmgr/hi16-app-printmgr.png b/tdeprint/printmgr/hi16-app-printmgr.png Binary files differindex d6defce21..64b7b9c6a 100644 --- a/tdeprint/printmgr/hi16-app-printmgr.png +++ b/tdeprint/printmgr/hi16-app-printmgr.png diff --git a/tdeprint/printmgr/hi22-app-printmgr.png b/tdeprint/printmgr/hi22-app-printmgr.png Binary files differindex a71ee2817..507cbec7d 100644 --- a/tdeprint/printmgr/hi22-app-printmgr.png +++ b/tdeprint/printmgr/hi22-app-printmgr.png diff --git a/tdeprint/printmgr/hi32-app-printmgr.png b/tdeprint/printmgr/hi32-app-printmgr.png Binary files differindex d554b554f..7ac6f627f 100644 --- a/tdeprint/printmgr/hi32-app-printmgr.png +++ b/tdeprint/printmgr/hi32-app-printmgr.png diff --git a/tdeprint/printmgr/hi48-app-printmgr.png b/tdeprint/printmgr/hi48-app-printmgr.png Binary files differindex 13adbd006..9b4410d31 100644 --- a/tdeprint/printmgr/hi48-app-printmgr.png +++ b/tdeprint/printmgr/hi48-app-printmgr.png diff --git a/tdeprint/printmgr/hi64-app-printmgr.png b/tdeprint/printmgr/hi64-app-printmgr.png Binary files differindex 5d22d215e..b8642f5bd 100644 --- a/tdeprint/printmgr/hi64-app-printmgr.png +++ b/tdeprint/printmgr/hi64-app-printmgr.png diff --git a/tdeprint/slave/templates/bar-bottom-left.png b/tdeprint/slave/templates/bar-bottom-left.png Binary files differindex 30a323592..ce77e855c 100644 --- a/tdeprint/slave/templates/bar-bottom-left.png +++ b/tdeprint/slave/templates/bar-bottom-left.png diff --git a/tdeprint/slave/templates/bar-bottom-middle.png b/tdeprint/slave/templates/bar-bottom-middle.png Binary files differindex b2ebbbed5..c3f1ca114 100644 --- a/tdeprint/slave/templates/bar-bottom-middle.png +++ b/tdeprint/slave/templates/bar-bottom-middle.png diff --git a/tdeprint/slave/templates/bar-middle-left.png b/tdeprint/slave/templates/bar-middle-left.png Binary files differindex 72fda9ec2..c4195cd91 100644 --- a/tdeprint/slave/templates/bar-middle-left.png +++ b/tdeprint/slave/templates/bar-middle-left.png diff --git a/tdeprint/slave/templates/bar-middle-right.png b/tdeprint/slave/templates/bar-middle-right.png Binary files differindex eb8d3201c..421a09d78 100644 --- a/tdeprint/slave/templates/bar-middle-right.png +++ b/tdeprint/slave/templates/bar-middle-right.png diff --git a/tdeprint/slave/templates/bar-top-middle.png b/tdeprint/slave/templates/bar-top-middle.png Binary files differindex 387f81017..6bcc074b5 100644 --- a/tdeprint/slave/templates/bar-top-middle.png +++ b/tdeprint/slave/templates/bar-top-middle.png diff --git a/tdeprint/slave/templates/bar-top-right.png b/tdeprint/slave/templates/bar-top-right.png Binary files differindex a552ff91d..ebfb0c750 100644 --- a/tdeprint/slave/templates/bar-top-right.png +++ b/tdeprint/slave/templates/bar-top-right.png diff --git a/tdeprint/slave/templates/bottom-left.png b/tdeprint/slave/templates/bottom-left.png Binary files differindex 78c9fece3..413ce8318 100644 --- a/tdeprint/slave/templates/bottom-left.png +++ b/tdeprint/slave/templates/bottom-left.png diff --git a/tdeprint/slave/templates/bottom-middle.png b/tdeprint/slave/templates/bottom-middle.png Binary files differindex 41e52dd8a..7b5e14ffb 100644 --- a/tdeprint/slave/templates/bottom-middle.png +++ b/tdeprint/slave/templates/bottom-middle.png diff --git a/tdeprint/slave/templates/bottom-right.png b/tdeprint/slave/templates/bottom-right.png Binary files differindex ef81b04a8..1298de1d4 100644 --- a/tdeprint/slave/templates/bottom-right.png +++ b/tdeprint/slave/templates/bottom-right.png diff --git a/tdeprint/slave/templates/box-bottom-left.png b/tdeprint/slave/templates/box-bottom-left.png Binary files differindex 650fa5743..fc1b824b4 100644 --- a/tdeprint/slave/templates/box-bottom-left.png +++ b/tdeprint/slave/templates/box-bottom-left.png diff --git a/tdeprint/slave/templates/box-bottom-middle.png b/tdeprint/slave/templates/box-bottom-middle.png Binary files differindex 2bcd3ea03..3c33a5577 100644 --- a/tdeprint/slave/templates/box-bottom-middle.png +++ b/tdeprint/slave/templates/box-bottom-middle.png diff --git a/tdeprint/slave/templates/box-bottom-right.png b/tdeprint/slave/templates/box-bottom-right.png Binary files differindex 975aaeed7..df7ee2822 100644 --- a/tdeprint/slave/templates/box-bottom-right.png +++ b/tdeprint/slave/templates/box-bottom-right.png diff --git a/tdeprint/slave/templates/box-centre-tdeprint.png b/tdeprint/slave/templates/box-centre-tdeprint.png Binary files differindex 97da1910e..f8a7852fc 100644 --- a/tdeprint/slave/templates/box-centre-tdeprint.png +++ b/tdeprint/slave/templates/box-centre-tdeprint.png diff --git a/tdeprint/slave/templates/box-middle-left.png b/tdeprint/slave/templates/box-middle-left.png Binary files differindex 62a720178..2fb43dd76 100644 --- a/tdeprint/slave/templates/box-middle-left.png +++ b/tdeprint/slave/templates/box-middle-left.png diff --git a/tdeprint/slave/templates/box-middle-right.png b/tdeprint/slave/templates/box-middle-right.png Binary files differindex aa94c0c90..7a30a9d81 100644 --- a/tdeprint/slave/templates/box-middle-right.png +++ b/tdeprint/slave/templates/box-middle-right.png diff --git a/tdeprint/slave/templates/box-top-left.png b/tdeprint/slave/templates/box-top-left.png Binary files differindex 34aba9195..a1fdb79b3 100644 --- a/tdeprint/slave/templates/box-top-left.png +++ b/tdeprint/slave/templates/box-top-left.png diff --git a/tdeprint/slave/templates/box-top-middle.png b/tdeprint/slave/templates/box-top-middle.png Binary files differindex 7ee2a0738..43f9e0d72 100644 --- a/tdeprint/slave/templates/box-top-middle.png +++ b/tdeprint/slave/templates/box-top-middle.png diff --git a/tdeprint/slave/templates/box-top-right.png b/tdeprint/slave/templates/box-top-right.png Binary files differindex 26d16d313..c01d47e6a 100644 --- a/tdeprint/slave/templates/box-top-right.png +++ b/tdeprint/slave/templates/box-top-right.png diff --git a/tdeprint/slave/templates/top-left.png b/tdeprint/slave/templates/top-left.png Binary files differindex c97114a7f..042e2bb8b 100644 --- a/tdeprint/slave/templates/top-left.png +++ b/tdeprint/slave/templates/top-left.png diff --git a/tdeprint/slave/templates/top-middle.png b/tdeprint/slave/templates/top-middle.png Binary files differindex bb3fe7428..bf593d122 100644 --- a/tdeprint/slave/templates/top-middle.png +++ b/tdeprint/slave/templates/top-middle.png diff --git a/tdeprint/slave/templates/top-right-tdeprint.png b/tdeprint/slave/templates/top-right-tdeprint.png Binary files differindex 56717342c..f545a114f 100644 --- a/tdeprint/slave/templates/top-right-tdeprint.png +++ b/tdeprint/slave/templates/top-right-tdeprint.png diff --git a/tdeprint/tdeprintfax/cr16-action-abentry.png b/tdeprint/tdeprintfax/cr16-action-abentry.png Binary files differindex b6b1011f3..96f6815db 100644 --- a/tdeprint/tdeprintfax/cr16-action-abentry.png +++ b/tdeprint/tdeprintfax/cr16-action-abentry.png diff --git a/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png Binary files differindex ad29adba7..8e2ec41c0 100644 --- a/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png +++ b/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png diff --git a/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png Binary files differindex bb676f8b7..02ca133c9 100644 --- a/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png +++ b/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png diff --git a/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png Binary files differindex 90fc64b0b..0bc0d400d 100644 --- a/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png +++ b/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png diff --git a/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png Binary files differindex 7330eb41f..6b5820da5 100644 --- a/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png +++ b/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png diff --git a/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png Binary files differindex 3f58c3695..8a98fb915 100644 --- a/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png +++ b/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png diff --git a/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png Binary files differindex 47e156d5f..1036cd2e8 100644 --- a/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png +++ b/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png diff --git a/tdm/CMakeLists.txt b/tdm/CMakeLists.txt index 08096f84c..ce8a1f4ed 100644 --- a/tdm/CMakeLists.txt +++ b/tdm/CMakeLists.txt @@ -21,3 +21,4 @@ include( ConfigureChecks.cmake ) add_subdirectory( backend ) add_subdirectory( kfrontend ) +add_subdirectory( cryptocardwatcher ) diff --git a/tdm/backend/client.c b/tdm/backend/client.c index 1dfd97849..5a699738e 100644 --- a/tdm/backend/client.c +++ b/tdm/backend/client.c @@ -180,7 +180,7 @@ PAM_conv( int num_msg, ReInitErrorLog(); Debug( "PAM_conv\n" ); - for (count = 0; count < num_msg; count++) + for (count = 0; count < num_msg; count++) { switch (msg[count]->msg_style) { case PAM_TEXT_INFO: Debug( " PAM_TEXT_INFO: %s\n", msg[count]->msg ); @@ -201,9 +201,18 @@ PAM_conv( int num_msg, /* case PAM_PROMPT_ECHO_ON: cannot happen */ case PAM_PROMPT_ECHO_OFF: Debug( " PAM_PROMPT_ECHO_OFF (usecur): %s\n", msg[count]->msg ); - if (!curpass) - pd->gconv( GCONV_PASS, 0 ); - StrDup( &reply[count].resp, curpass ); + // WARNING + // This is far from foolproof, but it's the best we can do at this time... + // Try to detect PIN entry requests + if (strstr(msg[count]->msg, "PIN")) { + reply[count].resp = pd->gconv(GCONV_HIDDEN, msg[count]->msg); + } + else { + if (!curpass) { + pd->gconv( GCONV_PASS, 0 ); + } + StrDup( &reply[count].resp, curpass ); + } break; default: LogError( "Unknown PAM message style <%d>\n", msg[count]->msg_style ); @@ -237,6 +246,7 @@ PAM_conv( int num_msg, } reply[count].resp_retcode = PAM_SUCCESS; /* unused in linux-pam */ } + } Debug( " PAM_conv success\n" ); *resp = reply; return PAM_SUCCESS; @@ -769,7 +779,6 @@ Verify( GConvFunc gconv, int rootok ) } #ifdef USE_PAM - Debug( " pam_acct_mgmt() ...\n" ); pretc = pam_acct_mgmt( pamh, 0 ); ReInitErrorLog(); @@ -1114,7 +1123,9 @@ SetGid( const char *name, int gid ) #ifdef HAVE_INITGROUPS if (initgroups( name, gid ) < 0) { LogError( "initgroups for %s failed: %m\n", name ); - setgid( 0 ); + if (setgid(0) != 0) { + LogError("setgid(0) failed\n"); + } return 0; } #endif /* QNX4 doesn't support multi-groups, no initgroups() */ @@ -1211,7 +1222,7 @@ int StartClient() #endif { - const char *home, *sessargs, *desksess; + const char *home, *sessargs, *desksess, *deskname; char **env, *xma; char **argv, *fname, *str; #ifdef USE_PAM @@ -1642,7 +1653,10 @@ StartClient() } } else { cdroot: - chdir( "/" ); + if (chdir( "/" ) != 0) { + LogError( "Cannot change directory to %s\n", "/" ); + goto logerr; + } tmperr: ASPrintf( &lname, "/tmp/xerr-%s-%s", curuser, td->name ); unlink( lname ); @@ -1667,6 +1681,7 @@ StartClient() GSendStr( desksess ); close( mstrtalk.pipe->wfd ); userEnviron = setEnv( userEnviron, "DESKTOP_SESSION", desksess ); + userEnviron = setEnv( userEnviron, "XDG_SESSION_DESKTOP", desksess ); for (i = 0; td->sessionsDirs[i]; i++) { fname = 0; if (StrApp( &fname, td->sessionsDirs[i], "/", desksess, ".desktop", (char *)0 )) { @@ -1674,6 +1689,10 @@ StartClient() if (!StrCmp( iniEntry( str, "Desktop Entry", "Hidden", 0 ), "true" ) || !(sessargs = iniEntry( str, "Desktop Entry", "Exec", 0 ))) sessargs = ""; + deskname = iniEntry( str, "Desktop Entry", "DesktopNames", 0 ); + if (deskname) { + userEnviron = setEnv( userEnviron, "XDG_CURRENT_DESKTOP", deskname ); + } free( str ); free( fname ); goto gotit; @@ -1828,13 +1847,19 @@ ReadDmrc() exit( 0 ); if (!(data = iniLoad( fname ))) { static const int m1 = -1; - write( pfd[1], &m1, sizeof(int) ); - exit( 0 ); + if (write(pfd[1], &m1, sizeof(int)) < 0) { + return GE_Error; + } + exit(0); } len = strlen( data ); - write( pfd[1], &len, sizeof(int) ); - write( pfd[1], data, len + 1 ); - exit( 0 ); + if (write(pfd[1], &len, sizeof(int)) < 0) { + return GE_Error; + } + if (write(pfd[1], data, len + 1) < 0) { + return GE_Error; + } + exit(0); } close( pfd[1] ); free( fname ); diff --git a/tdm/backend/dm.c b/tdm/backend/dm.c index cd672f39a..861037032 100644 --- a/tdm/backend/dm.c +++ b/tdm/backend/dm.c @@ -51,6 +51,9 @@ from the copyright holder. # include <sys/vt.h> #endif +// Limited by the number of VTs configured into the kernel or 256, whichever is less +#define MAX_VT_NUMBER 48 + static void SigHandler( int n ); static int ScanConfigs( int force ); static void StartDisplays( void ); @@ -324,8 +327,9 @@ activateVT( int vt ) static void WakeDisplay( struct display *d ) { - if (d->status == textMode) + if (d->status == textMode) { d->status = (d->displayType & d_lifetime) == dReserve ? reserve : notRunning; + } } #endif @@ -511,7 +515,7 @@ StopToTTY( struct display *d ) if ((d->displayType & d_location) == dLocal) switch (d->status) { default: - rStopDisplay( d, DS_TEXTMODE | 0x100 ); + rStopDisplay(d, DS_TEXTMODE | 0x100); case reserve: case textMode: break; @@ -523,9 +527,11 @@ CheckTTYMode( void ) { struct display *d; - for (d = displays; d; d = d->next) - if (d->status == zombie) + for (d = displays; d; d = d->next) { + if (d->status == zombie) { return; + } + } SwitchToTty(); } @@ -793,12 +799,12 @@ processGPipe( struct display *d ) case G_Console: #ifdef HAVE_VTS if (*consoleTTYs) { /* sanity check against greeter */ - ForEachDisplay( StopToTTY ); + ForEachDisplay(StopToTTY); CheckTTYMode(); } #else if (*d->console) /* sanity check against greeter */ - rStopDisplay( d, DS_TEXTMODE ); + rStopDisplay(d, DS_TEXTMODE); #endif break; default: @@ -852,7 +858,6 @@ cancelShutdown( void ) RescanConfigs( TRUE ); } - static void ReapChildren( void ) { @@ -860,12 +865,11 @@ ReapChildren( void ) struct display *d; waitType status; - while ((pid = waitpid( -1, &status, WNOHANG )) > 0) - { + while ((pid = waitpid( -1, &status, WNOHANG)) > 0) { Debug( "manager wait returns pid %d sig %d core %d code %d\n", pid, waitSig( status ), waitCore( status ), waitCode( status ) ); /* SUPPRESS 560 */ - if ((d = FindDisplayByPid( pid ))) { + if ((d = FindDisplayByPid(pid))) { d->pid = -1; UnregisterInput( d->pipe.rfd ); GClosen (&d->pipe); @@ -953,41 +957,45 @@ ReapChildren( void ) if (d->follower) { d->follower->serverVT = d->serverVT; d->follower = 0; - } else { - int con = open( "/dev/console", O_RDONLY ); + } + else { + int con = open("/dev/console", O_RDONLY); if (con >= 0) { struct vt_stat vtstat; ioctl( con, VT_GETSTATE, &vtstat ); if (vtstat.v_active == d->serverVT) { int vt = 1; struct display *di; - for (di = displays; di; di = di->next) - if (di != d && di->serverVT) + for (di = displays; di; di = di->next) { + if (di != d && di->serverVT) { vt = di->serverVT; - for (di = displays; di; di = di->next) + } + } + for (di = displays; di; di = di->next) { if (di != d && di->serverVT && (di->userSess >= 0 || - di->status == remoteLogin)) + di->status == remoteLogin)) { vt = di->serverVT; - ioctl( con, VT_ACTIVATE, vt ); + } + } + ioctl(con, VT_ACTIVATE, vt); } - ioctl( con, VT_DISALLOCATE, d->serverVT ); - close( con ); + ioctl(con, VT_DISALLOCATE, d->serverVT); + close(con); } } d->serverVT = 0; + d->status = notRunning; } #endif - rStopDisplay( d, d->zstatus ); + rStopDisplay(d, d->zstatus); break; case phoenix: - Debug( "phoenix X server arises, restarting display %s\n", - d->name ); + Debug( "phoenix X server arises, restarting display %s\n", d->name ); d->status = notRunning; break; case remoteLogin: - Debug( "remote login X server for display %s exited\n", - d->name ); + Debug( "remote login X server for display %s exited\n", d->name ); d->status = ((d->displayType & d_lifetime) == dReserve) ? reserve : notRunning; break; @@ -1032,11 +1040,14 @@ wouldShutdown( void ) struct display *d; if (sdRec.force != SHUT_CANCEL) { - if (sdRec.force == SHUT_FORCEMY) - for (d = displays; d; d = d->next) + if (sdRec.force == SHUT_FORCEMY) { + for (d = displays; d; d = d->next) { if (d->status == remoteLogin || - (d->userSess >= 0 && d->userSess != sdRec.uid)) + (d->userSess >= 0 && d->userSess != sdRec.uid)) { return 0; + } + } + } return 1; } return !AnyActiveDisplays(); @@ -1078,7 +1089,9 @@ SigHandler( int n ) int olderrno = errno; char buf = (char)n; /* Debug( "caught signal %d\n", n ); this hangs in syslog() */ - write( signalFds[1], &buf, 1 ); + if (write(signalFds[1], &buf, 1) != 1) { + // ERROR + } #ifdef __EMX__ (void)Signal( n, SigHandler ); #endif @@ -1178,23 +1191,27 @@ MainLoop( void ) break; case SIGCHLD: ReapChildren(); - if (!Stopping && autoRescan) + if (!Stopping && autoRescan) { RescanConfigs( FALSE ); + } break; case SIGUSR1: if (startingServer && - startingServer->serverStatus == starting) + startingServer->serverStatus == starting) { StartServerSuccess(); + } break; } continue; } #ifdef XDMCP - if (ProcessListenSockets( &reads )) + if (ProcessListenSockets( &reads )) { continue; + } #endif /* XDMCP */ - if (handleCtrl( &reads, 0 )) + if (handleCtrl( &reads, 0 )) { continue; + } /* Must be last (because of the breaks)! */ again: for (d = displays; d; d = d->next) { @@ -1216,18 +1233,21 @@ MainLoop( void ) static void CheckDisplayStatus( struct display *d ) { - if ((d->displayType & d_origin) == dFromFile && !d->stillThere) + if ((d->displayType & d_origin) == dFromFile && !d->stillThere) { StopDisplay( d ); + } else if ((d->displayType & d_lifetime) == dReserve && - d->status == running && d->userSess < 0 && !d->idleTimeout) - rStopDisplay( d, DS_RESERVE ); - else if (d->status == notRunning) + d->status == running && d->userSess < 0 && !d->idleTimeout) { + rStopDisplay(d, DS_RESERVE); + } + else if (d->status == notRunning) { if (LoadDisplayResources( d ) < 0) { LogError( "Unable to read configuration for display %s; " "stopping it.\n", d->name ); StopDisplay( d ); return; } + } } static void @@ -1240,27 +1260,37 @@ KickDisplay( struct display *d ) } #ifdef HAVE_VTS -static int active_vts; +static unsigned long active_vts; -static int -GetBusyVTs( void ) +static unsigned long +GetBusyVTs(void) { struct vt_stat vtstat; int con; if (active_vts == -1) { + unsigned short next_available_vt = 0; vtstat.v_state = 0; if ((con = open( "/dev/console", O_RDONLY )) >= 0) { - ioctl( con, VT_GETSTATE, &vtstat ); - close( con ); + ioctl(con, VT_GETSTATE, &vtstat); + ioctl(con, VT_OPENQRY, &next_available_vt); + close(con); } active_vts = vtstat.v_state; + if (next_available_vt > 0xf) { + // Assume all VTs less than the next available VT are busy + // This is due to limitations in the Linux console driver + int i; + for (i = 0x10; i < next_available_vt; i++) { + active_vts |= (1 << i); + } + } } return active_vts; } static void -AllocateVT( struct display *d ) +AllocateVT(struct display *d) { struct display *cd; int i, tvt, volun; @@ -1268,31 +1298,37 @@ AllocateVT( struct display *d ) if ((d->displayType & d_location) == dLocal && d->status == notRunning && !d->serverVT && d->reqSrvVT >= 0) { - if (d->reqSrvVT && d->reqSrvVT < 16) + if (d->reqSrvVT && d->reqSrvVT < MAX_VT_NUMBER) { d->serverVT = d->reqSrvVT; + } else { for (i = tvt = 0;;) { if (serverVTs[i]) { - tvt = atoi( serverVTs[i++] ); + tvt = atoi(serverVTs[i++]); volun = 0; if (tvt < 0) { tvt = -tvt; volun = 1; } - if (!tvt || tvt >= 16) + if (!tvt || tvt >= MAX_VT_NUMBER) { continue; - } else { - if (++tvt >= 16) + } + } + else { + if (++tvt >= MAX_VT_NUMBER) { break; + } volun = 1; } for (cd = displays; cd; cd = cd->next) { if (cd->reqSrvVT == tvt && /* protect from lusers */ - (cd->status != zombie || cd->zstatus != DS_REMOVE)) + (cd->status != zombie || cd->zstatus != DS_REMOVE)) { goto next; + } if (cd->serverVT == tvt) { - if (cd->status != zombie || cd->zstatus == DS_REMOTE) + if (cd->status != zombie || cd->zstatus == DS_REMOTE) { goto next; + } if (!cd->follower) { d->serverVT = -1; cd->follower = d; @@ -1300,7 +1336,7 @@ AllocateVT( struct display *d ) } } } - if (!volun || !((1 << tvt) & GetBusyVTs())) { + if (!volun || !((1 << (unsigned long)tvt) & GetBusyVTs())) { d->serverVT = tvt; return; } @@ -1426,27 +1462,34 @@ rStopDisplay( struct display *d, int endState ) AbortStartServer( d ); d->idleTimeout = 0; if (d->serverPid != -1 || d->pid != -1) { - if (d->pid != -1) + if (d->pid != -1) { TerminateProcess( d->pid, SIGTERM ); - if (d->serverPid != -1) + } + if (d->serverPid != -1) { TerminateProcess( d->serverPid, d->termSignal ); + } d->status = zombie; d->zstatus = endState & 0xff; Debug( " zombiefied\n" ); - } else if (endState == DS_TEXTMODE) { + } + else if (endState == DS_TEXTMODE) { #ifdef HAVE_VTS d->status = textMode; CheckTTYMode(); - } else if (endState == (DS_TEXTMODE | 0x100)) { + } + else if (endState == (DS_TEXTMODE | 0x100)) { d->status = textMode; #else SwitchToTty( d ); #endif - } else if (endState == DS_RESERVE) + } + else if (endState == DS_RESERVE) { d->status = reserve; + } #ifdef XDMCP - else if (endState == DS_REMOTE) + else if (endState == DS_REMOTE) { StartRemoteLogin( d ); + } #endif else { #ifndef HAVE_VTS @@ -1459,7 +1502,7 @@ rStopDisplay( struct display *d, int endState ) void StopDisplay( struct display *d ) { - rStopDisplay( d, DS_REMOVE ); + rStopDisplay(d, DS_REMOVE); } static void @@ -1476,8 +1519,7 @@ ExitDisplay( goodExit = TRUE; } - Debug( "ExitDisplay %s, " - "endState = %d, serverCmd = %d, GoodExit = %d\n", + Debug( "ExitDisplay %s, endState = %d, serverCmd = %d, GoodExit = %d\n", d->name, endState, serverCmd, goodExit ); d->userSess = -1; @@ -1511,18 +1553,19 @@ ExitDisplay( he->sdRec.osname = 0; } } - if (d->status == zombie) - rStopDisplay( d, d->zstatus ); + if (d->status == zombie) { + rStopDisplay(d, d->zstatus); + } else { if (Stopping) { StopDisplay( d ); return; } if (endState != DS_RESTART || - (d->displayType & d_origin) != dFromFile) - { - rStopDisplay( d, endState ); - } else { + (d->displayType & d_origin) != dFromFile) { + rStopDisplay(d, endState); + } + else { if (serverCmd == XS_RETRY) { if ((d->displayType & d_location) == dLocal) { if (he->lastExit - d->lastStart < 120) { diff --git a/tdm/backend/dpylist.c b/tdm/backend/dpylist.c index b512293f7..0119c12cb 100644 --- a/tdm/backend/dpylist.c +++ b/tdm/backend/dpylist.c @@ -64,12 +64,12 @@ AnyRunningDisplays( void ) for (d = displays; d; d = d->next) switch (d->status) { - case notRunning: - case textMode: - case reserve: - break; - default: - return 1; + case notRunning: + case textMode: + case reserve: + break; + default: + return 1; } return 0; } @@ -79,9 +79,11 @@ AnyReserveDisplays( void ) { struct display *d; - for (d = displays; d; d = d->next) - if ((d->displayType & d_lifetime) == dReserve) + for (d = displays; d; d = d->next) { + if ((d->displayType & d_lifetime) == dReserve) { return 1; + } + } return 0; } @@ -91,9 +93,11 @@ idleReserveDisplays( void ) struct display *d; int cnt = 0; - for (d = displays; d; d = d->next) - if (d->status == reserve) + for (d = displays; d; d = d->next) { + if (d->status == reserve) { cnt++; + } + } return cnt; } @@ -102,9 +106,11 @@ StartReserveDisplay( int lt ) { struct display *d, *rd; - for (rd = 0, d = displays; d; d = d->next) - if (d->status == reserve) + for (rd = 0, d = displays; d; d = d->next) { + if (d->status == reserve) { rd = d; + } + } if (rd) { rd->idleTimeout = lt; rd->status = notRunning; @@ -129,8 +135,9 @@ static void _forEachDisplayRev( struct display *d, void (*f)( struct display * ) ) { if (d) { - if (d->next) - _forEachDisplayRev( d->next, f ); + if (d->next) { + _forEachDisplayRev(d->next, f); + } (*f)( d ); } } @@ -147,9 +154,11 @@ FindDisplayByName( const char *name ) { struct display *d; - for (d = displays; d; d = d->next) - if (!strcmp( name, d->name )) + for (d = displays; d; d = d->next) { + if (!strcmp( name, d->name )) { return d; + } + } return 0; } @@ -158,9 +167,11 @@ FindDisplayByPid( int pid ) { struct display *d; - for (d = displays; d; d = d->next) - if (pid == d->pid) + for (d = displays; d; d = d->next) { + if (pid == d->pid) { return d; + } + } return 0; } @@ -169,9 +180,11 @@ FindDisplayByServerPid( int serverPid ) { struct display *d; - for (d = displays; d; d = d->next) - if (serverPid == d->serverPid) + for (d = displays; d; d = d->next) { + if (serverPid == d->serverPid) { return d; + } + } return 0; } @@ -182,9 +195,11 @@ FindDisplayBySessionID( CARD32 sessionID ) { struct display *d; - for (d = displays; d; d = d->next) - if (sessionID == d->sessionID) + for (d = displays; d; d = d->next) { + if (sessionID == d->sessionID) { return d; + } + } return 0; } @@ -193,12 +208,14 @@ FindDisplayByAddress( XdmcpNetaddr addr, int addrlen, CARD16 displayNumber ) { struct display *d; - for (d = displays; d; d = d->next) + for (d = displays; d; d = d->next) { if ((d->displayType & d_origin) == dFromXDMCP && d->displayNumber == displayNumber && addressEqual( (XdmcpNetaddr)d->from.data, d->from.length, - addr, addrlen )) + addr, addrlen )) { return d; + } + } return 0; } @@ -207,37 +224,38 @@ FindDisplayByAddress( XdmcpNetaddr addr, int addrlen, CARD16 displayNumber ) #define IfFree(x) if (x) free( (char *)x ) void -RemoveDisplay( struct display *old ) +RemoveDisplay(struct display *old) { struct display *d, **dp; int i; for (dp = &displays; (d = *dp); dp = &(*dp)->next) { if (d == old) { - Debug( "Removing display %s\n", d->name ); + Debug("Removing display %s\n", d->name); *dp = d->next; - IfFree( d->class2 ); - IfFree( d->cfg.data ); - delStr( d->cfg.dep.name ); + IfFree(d->class2); + IfFree(d->cfg.data); + delStr(d->cfg.dep.name); #ifdef XDMCP - IfFree( d->remoteHost ); + IfFree(d->remoteHost); #endif if (d->authorizations) { - for (i = 0; i < d->authNum; i++) - XauDisposeAuth( d->authorizations[i] ); - free( (char *)d->authorizations ); + for (i = 0; i < d->authNum; i++) { + XauDisposeAuth(d->authorizations[i]); + } + free((char *)d->authorizations); } if (d->authFile) { - (void)unlink( d->authFile ); - free( d->authFile ); + (void)unlink(d->authFile); + free(d->authFile); } - IfFree( d->authNameLens ); + IfFree(d->authNameLens); #ifdef XDMCP - XdmcpDisposeARRAY8( &d->peer ); - XdmcpDisposeARRAY8( &d->from ); - XdmcpDisposeARRAY8( &d->clientAddr ); + XdmcpDisposeARRAY8(&d->peer); + XdmcpDisposeARRAY8(&d->from); + XdmcpDisposeARRAY8(&d->clientAddr); #endif - free( (char *)d ); + free((char *)d); break; } } @@ -270,8 +288,9 @@ NewDisplay( const char *name ) hstent->next = disphist; disphist = hstent; } - if (!(d = (struct display *)Calloc( 1, sizeof(*d) ))) + if (!(d = (struct display *)Calloc( 1, sizeof(*d) ))) { return 0; + } d->next = displays; d->hstent = hstent; d->name = hstent->name; @@ -289,6 +308,6 @@ NewDisplay( const char *name ) d->xdmcpFd = -1; #endif displays = d; - Debug( "created new display %s\n", d->name ); + Debug("created new display %s\n", d->name); return d; } diff --git a/tdm/backend/server.c b/tdm/backend/server.c index e78d8a66c..3c934e2aa 100644 --- a/tdm/backend/server.c +++ b/tdm/backend/server.c @@ -178,28 +178,28 @@ StartServerTimeout() { struct display *d = startingServer; switch (d->serverStatus) { - case ignore: - case awaiting: - break; /* cannot happen */ - case starting: - LogError( "X server startup timeout, terminating\n" ); - kill( d->serverPid, d->termSignal ); - d->serverStatus = d->termSignal == SIGKILL ? killed : terminated; - serverTimeout = d->serverTimeout + now; - break; - case terminated: - LogInfo( "X server termination timeout, killing\n" ); - kill( d->serverPid, SIGKILL ); - d->serverStatus = killed; - serverTimeout = 10 + now; - break; - case killed: - LogInfo( "X server is stuck in D state; leaving it alone\n" ); - StartServerFailed(); - break; - case pausing: - StartServerOnce(); - break; + case ignore: + case awaiting: + break; /* cannot happen */ + case starting: + LogError( "X server startup timeout, terminating\n" ); + kill( d->serverPid, d->termSignal ); + d->serverStatus = d->termSignal == SIGKILL ? killed : terminated; + serverTimeout = d->serverTimeout + now; + break; + case terminated: + LogInfo( "X server termination timeout, killing\n" ); + kill( d->serverPid, SIGKILL ); + d->serverStatus = killed; + serverTimeout = 10 + now; + break; + case killed: + LogInfo( "X server is stuck in D state; leaving it alone\n" ); + StartServerFailed(); + break; + case pausing: + StartServerOnce(); + break; } } diff --git a/tdm/backend/session.c b/tdm/backend/session.c index 9a12ce312..4b5f372db 100644 --- a/tdm/backend/session.c +++ b/tdm/backend/session.c @@ -807,6 +807,10 @@ systemEnv( const char *user ) env = baseEnv( user ); if (td->authFile) env = setEnv( env, "XAUTHORITY", td->authFile ); + char *lang = getenv("LANG"); + if (lang != NULL) { + env = setEnv( env, "LANG", lang ); + } env = setEnv( env, "PATH", td->systemPath ); env = setEnv( env, "SHELL", td->systemShell ); return env; diff --git a/tdm/backend/util.c b/tdm/backend/util.c index 7dd58f031..4290c6db6 100644 --- a/tdm/backend/util.c +++ b/tdm/backend/util.c @@ -565,18 +565,22 @@ ListSessions( int flags, struct display *d, void *ctx, STRUCTUTMP *ut; #endif - for (di = displays; di; di = di->next) + for (di = displays; di; di = di->next) { if (((flags & lstRemote) || (di->displayType & d_location) == dLocal) && (di->status == remoteLogin || - ((flags & lstPassive) ? di->status == running : di->userSess >= 0))) - emitXSess( di, d, ctx ); + ((flags & lstPassive) ? di->status == running : di->userSess >= 0))) { + emitXSess(di, d, ctx); + } + } - if (!(flags & lstTTY)) + if (!(flags & lstTTY)) { return; + } #ifdef BSD_UTMP - if ((fd = open( UTMP_FILE, O_RDONLY )) < 0) + if ((fd = open( UTMP_FILE, O_RDONLY )) < 0) { return; + } while (Reader( fd, ut, sizeof(ut[0]) ) == sizeof(ut[0])) { if (*ut->ut_user) { /* no idea how to list passive TTYs on BSD */ #else @@ -590,40 +594,43 @@ ListSessions( int flags, struct display *d, void *ctx, { #endif if (*ut->ut_host) { /* from remote or x */ - if (!(flags & lstRemote)) + if (!(flags & lstRemote)) { continue; - } else { + } + } + else { /* hack around broken konsole which does not set ut_host. */ /* this check is probably linux-specific. */ /* alternatively we could open the device and try VT_OPENQRY. */ - if (memcmp( ut->ut_line, "tty", 3 ) || - !isdigit( ut->ut_line[3] )) + if (memcmp( ut->ut_line, "tty", 3 ) || !isdigit( ut->ut_line[3] )) { continue; + } } - if (StrNChrCnt( ut->ut_line, sizeof(ut->ut_line), ':' )) + if (StrNChrCnt( ut->ut_line, sizeof(ut->ut_line), ':' )) { continue; /* x login */ + } switch (StrNChrCnt( ut->ut_host, sizeof(ut->ut_host), ':' )) { - case 1: /* x terminal */ - continue; - default: + case 1: /* x terminal */ + continue; + default: #ifdef IP6_MAGIC - /* unknown - IPv6 makes things complicated */ - le = StrNLen( ut->ut_host, sizeof(ut->ut_host) ); - /* cut off screen number */ - for (dot = le; ut->ut_host[--dot] != ':'; ) - if (ut->ut_host[dot] == '.') { - le = dot; - break; - } - for (di = displays; di; di = di->next) - if (!memcmp( di->name, ut->ut_host, le ) && !di->name[le]) - goto cont; /* x terminal */ - break; - cont: - continue; - case 0: /* no x terminal */ + /* unknown - IPv6 makes things complicated */ + le = StrNLen( ut->ut_host, sizeof(ut->ut_host) ); + /* cut off screen number */ + for (dot = le; ut->ut_host[--dot] != ':'; ) + if (ut->ut_host[dot] == '.') { + le = dot; + break; + } + for (di = displays; di; di = di->next) + if (!memcmp( di->name, ut->ut_host, le ) && !di->name[le]) + goto cont; /* x terminal */ + break; + cont: + continue; + case 0: /* no x terminal */ #endif - break; + break; } emitTTYSess( ut, d, ctx ); } diff --git a/tdm/cryptocardwatcher/CMakeLists.txt b/tdm/cryptocardwatcher/CMakeLists.txt new file mode 100644 index 000000000..7564ac2cf --- /dev/null +++ b/tdm/cryptocardwatcher/CMakeLists.txt @@ -0,0 +1,32 @@ +################################################# +# +# (C) 2015 Timothy Pearson +# kb9vqf (AT) pearsoncomputing.net +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/tdmlib + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### tdecryptocardwatcher (executable) ######### + +tde_add_executable( tdecryptocardwatcher AUTOMOC + SOURCES main.cpp watcher.cc + LINK tdecore-shared tdeio-shared dmctl-static + DESTINATION ${BIN_INSTALL_DIR} + SETUID +) + diff --git a/tdm/cryptocardwatcher/main.cpp b/tdm/cryptocardwatcher/main.cpp new file mode 100644 index 000000000..5d27ff19b --- /dev/null +++ b/tdm/cryptocardwatcher/main.cpp @@ -0,0 +1,139 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of cryptocardwatcher, the TDE Cryptographic Card Session Monitor + * + * cryptocardwatcher 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. + * + * cryptocardwatcher 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <exception> +#include <string.h> +#include <unistd.h> +#include <errno.h> +#include <fcntl.h> +#include <limits.h> +#include <sys/file.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/select.h> +#include <sys/time.h> +#include <termios.h> +#include <signal.h> +#include <stdint.h> + +#include <tqobject.h> + +#include <tdeapplication.h> +#include <tdecmdlineargs.h> + +#include <ksslcertificate.h> + +#include <tdehardwaredevices.h> +#include <tdecryptographiccarddevice.h> + +#include "watcher.h" + +int lockfd = -1; +char lockFileName[256]; + +// -------------------------------------------------------------------------------------- +// Useful function from Stack Overflow +// http://stackoverflow.com/questions/1599459/optimal-lock-file-method +// -------------------------------------------------------------------------------------- +int tryGetLock(char const *lockName) { + mode_t m = umask( 0 ); + int fd = open( lockName, O_RDWR|O_CREAT, 0666 ); + umask( m ); + if( fd >= 0 && flock( fd, LOCK_EX | LOCK_NB ) < 0 ) { + close( fd ); + fd = -1; + } + return fd; +} +// -------------------------------------------------------------------------------------- + +// -------------------------------------------------------------------------------------- +// Useful function from Stack Overflow +// http://stackoverflow.com/questions/1599459/optimal-lock-file-method +// -------------------------------------------------------------------------------------- +void releaseLock(int fd, char const *lockName) { + if( fd < 0 ) { + return; + } + remove( lockName ); + close( fd ); +} +// -------------------------------------------------------------------------------------- + +void handle_sigterm(int signum) { + if (lockfd >= 0) { + releaseLock(lockfd, lockFileName); + } + exit(0); +} + +static TDECmdLineOptions options[] = +{ + TDECmdLineLastOption +}; + +int main(int argc, char *argv[]) { + int ret = -1; + + // Register cleanup handlers + struct sigaction action; + memset(&action, 0, sizeof(struct sigaction)); + action.sa_handler = handle_sigterm; + sigaction(SIGTERM, &action, NULL); + + // Ensure only one process is running + sprintf(lockFileName, "/var/lock/cryptocardwatcher.lock"); + lockfd = tryGetLock(lockFileName); + if (lockfd < 0) { + printf ("[cryptocardwatcher] Another instance of this program is already running!\n[cryptocardwatcher] Lockfile detected at '%s'\n", lockFileName); + return -2; + } + + // Parse command line arguments + TDECmdLineArgs::init(argc, argv, "cryptocardwatcher", "cryptocardwatcher", "TDE Cryptographic Card Session Monitor", "0.1"); + TDECmdLineArgs::addCmdLineOptions(options); + TDEApplication::addCmdLineOptions(); + + // Initialize TDE application + TDEApplication tdeapp(false, false); + tdeapp.disableAutoDcopRegistration(); + CardWatcher* watcher = new CardWatcher(); + + // Initialize SmartCard readers + TDEGenericDevice *hwdevice; + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard); + for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + TQObject::connect(cdevice, TQT_SIGNAL(cardInserted(TDECryptographicCardDevice*)), watcher, TQT_SLOT(cryptographicCardInserted(TDECryptographicCardDevice*))); + TQObject::connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), watcher, TQT_SLOT(cryptographicCardRemoved(TDECryptographicCardDevice*))); + cdevice->enableCardMonitoring(true); + } + + // Start TDE application + ret = tdeapp.exec(); + + // Clean up + delete watcher; + + releaseLock(lockfd, lockFileName); + return ret; +} diff --git a/tdm/cryptocardwatcher/watcher.cc b/tdm/cryptocardwatcher/watcher.cc new file mode 100644 index 000000000..ecd4e8f3c --- /dev/null +++ b/tdm/cryptocardwatcher/watcher.cc @@ -0,0 +1,105 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of cryptocardwatcher, the TDE Cryptographic Card Session Monitor + * + * cryptocardwatcher 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. + * + * cryptocardwatcher 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#include "watcher.h" + +#include <ksslcertificate.h> + +#include <tdehardwaredevices.h> +#include <tdecryptographiccarddevice.h> + +#include <dmctl.h> +#include <kuser.h> + +CardWatcher::CardWatcher() : TQObject() { + // +} + +CardWatcher::~CardWatcher() { + // +} + +void CardWatcher::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) { + TQString login_name = TQString::null; + X509CertificatePtrList certList = cdevice->cardX509Certificates(); + if (certList.count() > 0) { + KSSLCertificate* card_cert = NULL; + card_cert = KSSLCertificate::fromX509(certList[0]); + TQStringList cert_subject_parts = TQStringList::split("/", card_cert->getSubject(), false); + for (TQStringList::Iterator it = cert_subject_parts.begin(); it != cert_subject_parts.end(); ++it ) { + TQString lcpart = (*it).lower(); + if (lcpart.startsWith("cn=")) { + login_name = lcpart.right(lcpart.length() - strlen("cn=")); + } + } + delete card_cert; + } + + if (login_name != "") { + // Determine if user already has an active session + DM dm; + SessList sess; + bool user_active = false; + bool unused_session_available = false; + bool unused_session_active = false; + int unused_session_vt_number = -1; + if (dm.localSessions(sess)) { + TQString user, loc; + for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + DM::sess2Str2(*it, user, loc); + if (user.startsWith(login_name + ": ")) { + // Found active session + user_active = true; + + // Switch VTs + DM().switchVT((*it).vt); + + break; + } + if (user == "Unused") { + // Found active unused session + unused_session_available = true; + unused_session_vt_number = (*it).vt; + if ((*it).vt == dm.activeVT()) { + unused_session_active = true; + break; + } + } + } + } + if (!user_active || unused_session_available) { + if (unused_session_available) { + if (!unused_session_active) { + // Switch to unused VT + DM().switchVT(unused_session_vt_number); + } + } + else { + // Activate new VT + DM().startReserve(); + } + } + } +} + +void CardWatcher::cryptographicCardRemoved(TDECryptographicCardDevice* cdevice) { + // +} + +#include "watcher.moc"
\ No newline at end of file diff --git a/tdm/cryptocardwatcher/watcher.h b/tdm/cryptocardwatcher/watcher.h new file mode 100644 index 000000000..bfbb010a0 --- /dev/null +++ b/tdm/cryptocardwatcher/watcher.h @@ -0,0 +1,40 @@ +/* + * Copyright 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This file is part of cryptocardwatcher, the TDE Cryptographic Card Session Monitor + * + * cryptocardwatcher 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. + * + * cryptocardwatcher 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 cryptocardwatcher. If not, see http://www.gnu.org/licenses/. + */ + +#ifndef __TDECRYPTOCARDWATCHER_H__ +#define __TDECRYPTOCARDWATCHER_H__ + +#include <tqobject.h> + +class TDECryptographicCardDevice; + +class CardWatcher : public TQObject +{ + Q_OBJECT + + public: + CardWatcher(); + ~CardWatcher(); + + public slots: + void cryptographicCardInserted(TDECryptographicCardDevice*); + void cryptographicCardRemoved(TDECryptographicCardDevice*); +}; + +#endif // __TDECRYPTOCARDWATCHER_H__
\ No newline at end of file diff --git a/tdm/kfrontend/CMakeLists.txt b/tdm/kfrontend/CMakeLists.txt index 8c0fffd5c..1de0d14fb 100644 --- a/tdm/kfrontend/CMakeLists.txt +++ b/tdm/kfrontend/CMakeLists.txt @@ -22,11 +22,13 @@ include_directories( ${CMAKE_SOURCE_DIR}/kcontrol/background ${TDE_INCLUDE_DIR} ${TQT_INCLUDE_DIRS} + ${KRB5_INCLUDE_DIRS} ) link_directories( ${TQT_LIBRARY_DIRS} ${LIBART_LIBRARY_DIRS} + ${TDE_LIB_DIR} ) @@ -68,7 +70,7 @@ tde_add_executable( tdm_greet AUTOMOC kfdialog.cpp kgdialog.cpp kchooser.cpp kgverify.cpp tdmshutdown.cpp tdmadmindialog.cpp kgreeter.cpp kgapp.cpp sakdlg.cc - LINK tdmthemer-static tdeui-shared Xtst ${TDMGREET_OPTIONAL_LINK} + LINK tdmthemer-static tdeui-shared tdeio-shared dmctl-static Xtst ${LIBTDELDAP_LIBRARIES} ${TDMGREET_OPTIONAL_LINK} DESTINATION ${BIN_INSTALL_DIR} ) diff --git a/tdm/kfrontend/kgapp.cpp b/tdm/kfrontend/kgapp.cpp index 2d630485e..c0000aef0 100644 --- a/tdm/kfrontend/kgapp.cpp +++ b/tdm/kfrontend/kgapp.cpp @@ -34,6 +34,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #endif #include "sakdlg.h" +#include <kuser.h> #include <kprocess.h> #include <tdecmdlineargs.h> #include <kcrash.h> @@ -72,6 +73,7 @@ bool has_twin = false; bool is_themed = false; bool trinity_desktop_lock_use_sak = TRUE; bool trinity_desktop_synchronize_keyboard_lights = TRUE; +bool trinity_desktop_watch_cryptographic_cards = TRUE; TQPoint primaryScreenPosition; static int @@ -216,6 +218,7 @@ kg_main( const char *argv0 ) TDEProcess *tsak = 0; TDEProcess *kbdl = 0; + TDEProcess *ccsm = 0; TDEProcess *proc = 0; TDEProcess *comp = 0; TDEProcess *dcop = 0; @@ -252,6 +255,12 @@ kg_main( const char *argv0 ) kbdl->start(); } + if (trinity_desktop_watch_cryptographic_cards) { + ccsm = new TDEProcess; + *ccsm << TQCString( argv0, strrchr( argv0, '/' ) - argv0 + 2 ) + "tdecryptocardwatcher"; + ccsm->start(); + } + XSetErrorHandler( ignoreXError ); argb_visual_available = false; char *display = 0; @@ -334,6 +343,7 @@ kg_main( const char *argv0 ) XSetIOErrorHandler( xIOErr ); TQString login_user; + TQString login_card_user; TQString login_session_wm; Display *dpy = tqt_xdisplay(); @@ -491,6 +501,7 @@ kg_main( const char *argv0 ) Debug( "left event loop\n" ); login_user = static_cast<KGreeter*>(dialog)->curUser; + login_card_user = static_cast<KGreeter*>(dialog)->cardLoginUser; login_session_wm = static_cast<KGreeter*>(dialog)->curWMSession; if (rslt != ex_greet) { @@ -514,13 +525,36 @@ kg_main( const char *argv0 ) KGVerify::done(); + KUser userinfo(login_user); + if (userinfo.isValid()) { + TQString fileName = userinfo.homeDir() + "/.tde_card_login_state"; + TQFile flagFile(fileName); + if ((login_card_user != TQString::null) && (login_user == login_card_user)) { + // Card was likely used to log in + if (flagFile.open(IO_WriteOnly)) { + flagFile.writeBlock("1\n", 2); + fchown(flagFile.handle(), userinfo.uid(), userinfo.gid()); + flagFile.close(); + } + } + else { + // Card was not used to log in + flagFile.remove(); + } + } + if (kbdl) { kbdl->closeStdin(); kbdl->detach(); } + if (ccsm) { + ccsm->closeStdin(); + ccsm->detach(); + } if (comp) { if (comp->isRunning()) { - if (_compositor == TDE_COMPOSITOR_BINARY) { + if (((login_session_wm == "tde") || (login_session_wm == "trinity") || (login_session_wm == "failsafe")) && + (_compositor == TDE_COMPOSITOR_BINARY)) { // Change process UID // Get user UID passwd* userinfo = getpwnam(login_user.ascii()); @@ -533,15 +567,18 @@ kg_main( const char *argv0 ) comp->writeStdin(newuid.ascii(), newuid.length()); usleep(50000); // Give the above function some time to execute. Note that on REALLY slow systems this could fail, leaving kompmgr running as root. TODO: Look into ways to make this more robust. } + comp->closeStdin(); + comp->detach(); + } + else { + comp->kill(); } - comp->closeStdin(); - comp->detach(); } delete comp; } if (twin) { if (twin->isRunning()) { - if (login_session_wm.endsWith("/starttde") || (login_session_wm == "failsafe")) { + if ((login_session_wm == "tde") || (login_session_wm == "trinity") || (login_session_wm == "failsafe")) { twin->closeStdin(); twin->detach(); dcop->detach(); diff --git a/tdm/kfrontend/kgreeter.cpp b/tdm/kfrontend/kgreeter.cpp index aa89fd78e..5da8bfc51 100644 --- a/tdm/kfrontend/kgreeter.cpp +++ b/tdm/kfrontend/kgreeter.cpp @@ -33,6 +33,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "themer/tdmitem.h" #include "themer/tdmlabel.h" +#include <dmctl.h> + +#include <ksslcertificate.h> + +#include <tdehardwaredevices.h> +#include <tdecryptographiccarddevice.h> + #include <tdeapplication.h> #include <tdelocale.h> #include <kstandarddirs.h> @@ -92,6 +99,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include <X11/Xlib.h> +#ifdef HAVE_KRB5 +#include <tde/libtdeldap.h> +#endif + #define FIFO_DIR "/tmp/tdesocket-global/tdm" #define FIFO_FILE "/tmp/tdesocket-global/tdm/tdmctl-%1" #define FIFO_SAK_FILE "/tmp/tdesocket-global/tdm/tdmctl-sak-%1" @@ -185,6 +196,7 @@ KGreeter::KGreeter( bool framed ) , prevValid( true ) , needLoad( false ) , themed( framed ) + , showInfoMessages( true ) , closingDown( false ) { stsFile = new KSimpleConfig( _stsFile ); @@ -234,6 +246,21 @@ KGreeter::~KGreeter() delete stsFile; } +void KGreeter::cryptographicCardWatcherSetup() { + cardLoginUser = TQString::null; + + // Initialize SmartCard readers + TDEGenericDevice *hwdevice; + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard); + for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + connect(cdevice, TQT_SIGNAL(certificateListAvailable(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardInserted(TDECryptographicCardDevice*))); + connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardRemoved(TDECryptographicCardDevice*))); + cdevice->enableCardMonitoring(true); + } +} + void KGreeter::done(int r) { closingDown = true; inherited::done(r); @@ -414,9 +441,9 @@ class KCStringList : public TQValueList<TQCString> { } }; -class UserList { +class KGreeterUserList { public: - UserList( char **in ); + KGreeterUserList( char **in ); bool hasUser( const char *str ) const { return users.contains( str ); } bool hasGroup( gid_t gid ) const { return groups.find( gid ) != groups.end(); } @@ -427,7 +454,7 @@ class UserList { TQValueList<gid_t> groups; }; -UserList::UserList( char **in ) +KGreeterUserList::KGreeterUserList( char **in ) { struct group *grp; @@ -462,7 +489,7 @@ KGreeter::insertUsers(int limit_users) default_pix.convertDepth( 32 ).smoothScale( ns, TQ_ScaleMin ); } if (_showUsers == SHOW_ALL) { - UserList noUsers( _noUsers ); + KGreeterUserList noUsers( _noUsers ); TQDict<int> dupes( 1000 ); // Potential crash risk with buffer overrun? TQStringList toinsert; int count = 0; @@ -528,7 +555,7 @@ KGreeter::insertUsers(int limit_users) insertUser( default_pix, *it, ps ); } } else { - UserList users( _users ); + KGreeterUserList users( _users ); if (users.hasGroups()) { TQDict<int> dupes( 1000 ); for (setpwent(); (ps = getpwent()) != 0;) { @@ -612,12 +639,13 @@ KGreeter::slotUserEntered() { if (userView) { TQListViewItem *item; - for (item = userView->firstChild(); item; item = item->nextSibling()) + for (item = userView->firstChild(); item; item = item->nextSibling()) { if (((UserListViewItem *)item)->login == curUser) { userView->setSelected( item, true ); userView->ensureItemVisible( item ); goto oke; } + } userView->clearSelection(); } oke: @@ -735,15 +763,18 @@ KGreeter::slotLoadPrevWM() } } - for (uint i = 0; i < sessionTypes.count() && !sessionTypes[i].hid; i++) + for (uint i = 0; i < sessionTypes.count() && !sessionTypes[i].hid; i++) { if (sessionTypes[i].type == sess) { free( sess ); setPrevWM( i ); + curWMSession = sessionTypes[i].type.utf8(); return; } - if (curSel == -1) + } + if (curSel == -1) { MsgBox( sorrybox, i18n("Your saved session type '%1' is not valid any more.\n" "Please select a new one, otherwise 'default' will be used.").arg( sess ) ); + } free( sess ); prevValid = false; } @@ -829,6 +860,98 @@ KGreeter::verifySetUser( const TQString &user ) slotUserEntered(); } +void KGreeter::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) { +#ifdef HAVE_KRB5 + // Make sure card logins are enabled before attempting one + if (!LDAPManager::pkcsLoginEnabled()) { + return; + } +#else + // Don't enable card-based logins if Kerberos integration was disabled + return; +#endif + + TQString login_name = TQString::null; + X509CertificatePtrList certList = cdevice->cardX509Certificates(); + if (certList.count() > 0) { + KSSLCertificate* card_cert = NULL; + card_cert = KSSLCertificate::fromX509(certList[0]); + TQStringList cert_subject_parts = TQStringList::split("/", card_cert->getSubject(), false); + for (TQStringList::Iterator it = cert_subject_parts.begin(); it != cert_subject_parts.end(); ++it ) { + TQString lcpart = (*it).lower(); + if (lcpart.startsWith("cn=")) { + login_name = lcpart.right(lcpart.length() - strlen("cn=")); + } + } + delete card_cert; + } + + if (login_name != "") { + if (verify->cardLoginInProgress) { + return; + } + verify->cardLoginInProgress = true; + verify->cardLoginDevice = cdevice; + + DM dm; + SessList sess; + bool vt_active = false; + bool user_active = false; + if (dm.localSessions(sess)) { + TQString user, loc; + for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + DM::sess2Str2(*it, user, loc); + if (user.startsWith(login_name + ": ")) { + // Found active session + user_active = true; + } + if ((*it).self) { + if ((*it).vt == dm.activeVT()) { + vt_active = true; + } + } + } + } + + if (!user_active && vt_active) { + // Select the correct user + verify->setUser(login_name); + if (userView) { + userView->setEnabled(false); + } + verifySetUser(login_name); + verify->lockUserEntry(true); + + // FIXME + // pam_pkcs11 is extremely chatty with no apparent way to disable the unwanted messages + verify->setInfoMessageDisplay(false); + + // Set up password prompt + cardLoginUser = login_name; + verify->setPasswordPrompt(i18n("PIN:")); + + // Bypass initial password prompt + verify->start(); + verify->setPassword(""); + verify->accept(); + } + } +} + +void KGreeter::cryptographicCardRemoved(TDECryptographicCardDevice* cdevice) { + cardLoginUser = TQString::null; + userView->setEnabled(false); + verify->lockUserEntry(false); + verify->requestAbort(); + verify->setPasswordPrompt(TQString::null); + + // Restore information message display settings + verify->setInfoMessageDisplay(showInfoMessages); + + verify->cardLoginInProgress = false; + verify->cardLoginDevice = NULL; +} + KStdGreeter::KStdGreeter() : KGreeter() , clock( 0 ) @@ -974,7 +1097,10 @@ KStdGreeter::KStdGreeter() pluginSetup(); + verify->setInfoMessageDisplay(showInfoMessages); verify->start(); + + TQTimer::singleShot(0, this, SLOT(cryptographicCardWatcherSetup())); } void @@ -1039,8 +1165,9 @@ KThemedGreeter::KThemedGreeter() xauth_warning = themer->findNode( "xauth-warning" ); // tdm ext pam_error = themer->findNode( "pam-error" ); timed_label = themer->findNode( "timed-label" ); - if (pam_error && pam_error->isA( "KdmLabel" )) + if (pam_error && pam_error->isA( "KdmLabel" )) { static_cast<KdmLabel*>(pam_error)->setText( i18n("Login Failed.") ); + } KdmItem *itm; if ((itm = themer->findNode( "pam-message" ))) // done via msgboxes @@ -1121,7 +1248,10 @@ KThemedGreeter::KThemedGreeter() pluginSetup(); + verify->setInfoMessageDisplay(showInfoMessages); verify->start(); + + TQTimer::singleShot(0, this, SLOT(cryptographicCardWatcherSetup())); } bool @@ -1199,6 +1329,10 @@ KThemedGreeter::updateStatus( bool fail, bool caps, int timedleft ) timed_label->hide( true ); } } + + if (cardLoginUser != TQString::null) { + verify->setPasswordPrompt(i18n("PIN:")); + } } void diff --git a/tdm/kfrontend/kgreeter.h b/tdm/kfrontend/kgreeter.h index 7d1c1bc6f..f715b3a8c 100644 --- a/tdm/kfrontend/kgreeter.h +++ b/tdm/kfrontend/kgreeter.h @@ -46,6 +46,8 @@ class TQListViewItem; class KGreeter; class SAKDlg; +class TDECryptographicCardDevice; + struct SessType { TQString name, type; bool hid; @@ -108,7 +110,10 @@ class KGreeter : public KGDialog, public KGVerifyHandler { void processInputPipeCommand(TQString command); public: - TQString curUser, curWMSession, dName; + TQString curUser, cardLoginUser, curWMSession, dName; + + protected slots: + void cryptographicCardWatcherSetup(); protected: void readFacesList(); @@ -132,12 +137,15 @@ class KGreeter : public KGDialog, public KGVerifyHandler { bool prevValid; bool needLoad; bool themed; + bool showInfoMessages; static int curPlugin; static PluginList pluginList; private slots: void slotLoadPrevWM(); + void cryptographicCardInserted(TDECryptographicCardDevice*); + void cryptographicCardRemoved(TDECryptographicCardDevice*); private: ControlPipeHandlerObject* mControlPipeHandler; diff --git a/tdm/kfrontend/kgverify.cpp b/tdm/kfrontend/kgverify.cpp index 46b89e9c5..93bcce27a 100644 --- a/tdm/kfrontend/kgverify.cpp +++ b/tdm/kfrontend/kgverify.cpp @@ -30,6 +30,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "themer/tdmthemer.h" #include "themer/tdmitem.h" +#include "themer/tdmlabel.h" + +#include <ksslcertificate.h> + +#include <tdehardwaredevices.h> +#include <tdecryptographiccarddevice.h> #include <tdeapplication.h> #include <tdelocale.h> @@ -66,30 +72,34 @@ void KGVerifyHandler::updateStatus( bool, bool, int ) { } -KGVerify::KGVerify( KGVerifyHandler *_handler, KdmThemer *_themer, - TQWidget *_parent, TQWidget *_predecessor, - const TQString &_fixedUser, - const PluginList &_pluginList, - KGreeterPlugin::Function _func, - KGreeterPlugin::Context _ctx ) +KGVerify::KGVerify(KGVerifyHandler *_handler, KdmThemer *_themer, + TQWidget *_parent, TQWidget *_predecessor, + const TQString &_fixedUser, + const PluginList &_pluginList, + KGreeterPlugin::Function _func, + KGreeterPlugin::Context _ctx) : inherited() - , coreLock( 0 ) - , fixedEntity( _fixedUser ) - , pluginList( _pluginList ) - , handler( _handler ) - , themer( _themer ) - , parent( _parent ) - , predecessor( _predecessor ) - , plugMenu( 0 ) - , curPlugin( -1 ) - , timedLeft( 0 ) - , func( _func ) - , ctx( _ctx ) - , enabled( true ) - , running( false ) - , suspended( false ) - , failed( false ) - , isClear( true ) + , coreLock(0) + , fixedEntity(_fixedUser) + , pluginList(_pluginList) + , handler(_handler) + , themer(_themer) + , parent(_parent) + , predecessor(_predecessor) + , plugMenu(0) + , curPlugin(-1) + , timedLeft(0) + , func(_func) + , ctx(_ctx) + , enabled(true) + , running(false) + , suspended(false) + , failed(false) + , isClear(true) + , inGreeterPlugin(false) + , abortRequested(false) + , cardLoginInProgress(false) + , cardLoginDevice(NULL) { connect( &timer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()) ); connect( kapp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity()) ); @@ -269,6 +279,14 @@ KGVerify::setUser( const TQString &user ) } void +KGVerify::lockUserEntry(const bool lock) +{ + // assert( fixedEntity.isEmpty() ); + Debug( "%s->lockUserEntry(%\"s)\n", pName.data(), lock ); + greet->lockUserEntry(lock); +} + +void KGVerify::setPassword( const TQString &pass ) { greet->setPassword( pass ); @@ -276,6 +294,26 @@ KGVerify::setPassword( const TQString &pass ) } void +KGVerify::setInfoMessageDisplay(bool on) +{ + // assert( fixedEntity.isEmpty() ); + Debug( "%s->setInfoMessageDisplay(%\"s)\n", pName.data(), on ); + greet->setInfoMessageDisplay(on); +} + +void +KGVerify::setPasswordPrompt(const TQString &prompt) +{ + greet->setPasswordPrompt(prompt); + if (prompt != TQString::null) { + setPassPromptText(prompt, false); + } + else { + setPassPromptText(TQString::null, true); + } +} + +void KGVerify::start() { authTok = (func == KGreeterPlugin::ChAuthTok); @@ -285,8 +323,10 @@ KGVerify::start() if (!_autoLoginAgain) _autoLoginDelay = 0, timeable = false; return; - } else + } + else if (!cardLoginInProgress) { applyPreset(); + } } running = true; Debug( "%s->start()\n", pName.data() ); @@ -350,30 +390,41 @@ KGVerify::doReject( bool initial ) { // assert( !cont ); if (running) { - Debug( "%s->abort()\n", pName.data() ); + Debug("%s->abort()\n", pName.data()); greet->abort(); } handler->verifyClear(); - Debug( "%s->clear()\n", pName.data() ); + Debug("%s->clear()\n", pName.data()); greet->clear(); curUser = TQString::null; - if (!scheduleAutoLogin( initial )) { + if (!scheduleAutoLogin(initial)) { isClear = !(isClear && applyPreset()); if (running) { Debug( "%s->start()\n", pName.data() ); greet->start(); } - if (!failed) + if (!failed) { timer.stop(); + } } } void // not a slot - called manually by greeter KGVerify::reject() { + inGreeterPlugin = false; doReject( true ); } +void // not a slot - called manually by greeter +KGVerify::requestAbort() +{ + abortRequested = true; + if (inGreeterPlugin) { + greet->next(); + } +} + void KGVerify::setEnabled( bool on ) { @@ -478,27 +529,28 @@ KGVerify::VErrBox( TQWidget *parent, const TQString &user, const char *msg ) } void // private static -KGVerify::VInfoBox( TQWidget *parent, const TQString &user, const char *msg ) +KGVerify::VInfoBox(TQWidget *parent, const TQString &user, const char *msg) { TQString mesg = TQString::fromLocal8Bit( msg ); TQRegExp rx( "^Warning: your account will expire in (\\d+) day" ); - if (rx.search( mesg ) >= 0) { - int expire = rx.cap( 1 ).toInt(); + if (rx.search(mesg) >= 0) { + int expire = rx.cap(1).toInt(); mesg = expire ? i18n("Your account expires tomorrow.", "Your account expires in %n days.", expire) : i18n("Your account expires today."); - } else { + } + else { rx.setPattern( "^Warning: your password will expire in (\\d+) day" ); - if (rx.search( mesg ) >= 0) { - int expire = rx.cap( 1 ).toInt(); + if (rx.search(mesg) >= 0) { + int expire = rx.cap(1).toInt(); mesg = expire ? i18n("Your password expires tomorrow.", "Your password expires in %n days.", expire) : i18n("Your password expires today."); } } - VMsgBox( parent, user, infobox, mesg ); + VMsgBox(parent, user, infobox, mesg); } bool // public static @@ -597,9 +649,40 @@ KGVerify::handleVerify() Debug( " echo = %d\n", echo ); ndelay = GRecvInt(); Debug( " ndelay = %d\n%s->textPrompt(...)\n", ndelay, pName.data() ); - greet->textPrompt( msg, echo, ndelay ); - if (msg) - free( msg ); + if (abortRequested) { + inGreeterPlugin = true; + greet->textPrompt("", echo, ndelay); + inGreeterPlugin = !ndelay; + abortRequested = false; + } + else { + if (msg && (msg[0] != 0)) { + // Reset password entry and change text + setPassPromptText(msg); + greet->start(); + inGreeterPlugin = true; + greet->textPrompt(msg, echo, ndelay); + inGreeterPlugin = !ndelay; + + if (cardLoginInProgress) { + TQString autoPIN = cardLoginDevice->autoPIN(); + if (autoPIN != TQString::null) { + // Initiate login + setPassword(autoPIN); + accept(); + } + cardLoginInProgress = false; + } + } + else { + inGreeterPlugin = true; + greet->textPrompt(msg, echo, ndelay); + inGreeterPlugin = !ndelay; + } + } + if (msg) { + free(msg); + } return; case V_GET_BINARY: Debug( " V_GET_BINARY\n" ); @@ -607,9 +690,17 @@ KGVerify::handleVerify() Debug( " %d bytes prompt\n", ret ); ndelay = GRecvInt(); Debug( " ndelay = %d\n%s->binaryPrompt(...)\n", ndelay, pName.data() ); - greet->binaryPrompt( msg, ndelay ); - if (msg) - free( msg ); + if (abortRequested) { + gplugReturnBinary(NULL); + } + else { + inGreeterPlugin = true; + greet->binaryPrompt( msg, ndelay ); + inGreeterPlugin = !ndelay; + } + if (msg) { + free(msg); + } return; } @@ -622,11 +713,12 @@ KGVerify::handleVerify() curUser = user = TQString::fromLocal8Bit( msg ); // greet needs this to be able to return something useful from // getEntity(). but the backend is still unable to tell a domain ... - Debug( " %s->setUser(%\"s)\n", pName.data(), user.latin1() ); + Debug(" %s->setUser(%\"s)\n", pName.data(), user.latin1()); greet->setUser( curUser ); - handler->verifySetUser( curUser ); - if (msg) - free( msg ); + handler->verifySetUser(curUser); + if (msg) { + free(msg); + } continue; case V_PRE_OK: // this is only for func == AuthChAuthTok Debug( " V_PRE_OK\n" ); @@ -636,8 +728,10 @@ KGVerify::handleVerify() // is not implemented yet. authTok = true; cont = true; - Debug( "%s->succeeded()\n", pName.data() ); + Debug("%s->succeeded()\n", pName.data()); greet->succeeded(); + abortRequested = false; + inGreeterPlugin = false; continue; case V_CHTOK_AUTH: Debug( " V_CHTOK_AUTH\n" ); @@ -648,14 +742,17 @@ KGVerify::handleVerify() Debug( " V_CHTOK\n" ); nfunc = KGreeterPlugin::ChAuthTok; user = TQString::null; - dchtok: + dchtok: { timer.stop(); Debug( "%s->succeeded()\n", pName.data() ); greet->succeeded(); + abortRequested = false; + inGreeterPlugin = false; KGChTok chtok( parent, user, pluginList, curPlugin, nfunc, KGreeterPlugin::Login ); - if (!chtok.exec()) + if (!chtok.exec()) { goto retry; + } handler->verifyOk(); return; } @@ -663,24 +760,39 @@ KGVerify::handleVerify() Debug( " V_MSG_ERR\n" ); msg = GRecvStr(); Debug( " %s->textMessage(%\"s, true)\n", pName.data(), msg ); + inGreeterPlugin = true; if (!greet->textMessage( msg, true )) { + inGreeterPlugin = false; Debug( " message passed\n" ); - VErrBox( parent, user, msg ); - } else + if (!abortRequested) { + VErrBox( parent, user, msg ); + } + } + else { + inGreeterPlugin = false; Debug( " message swallowed\n" ); - if (msg) - free( msg ); + } + if (msg) { + free(msg); + } continue; case V_MSG_INFO: Debug( " V_MSG_INFO\n" ); msg = GRecvStr(); Debug( " %s->textMessage(%\"s, false)\n", pName.data(), msg ); + inGreeterPlugin = true; if (!greet->textMessage( msg, false )) { + inGreeterPlugin = false; Debug( " message passed\n" ); - VInfoBox( parent, user, msg ); - } else - Debug( " message swallowed\n" ); - free( msg ); + if (!abortRequested) { + VInfoBox(parent, user, msg); + } + } + else { + inGreeterPlugin = false; + Debug(" message swallowed\n"); + } + free(msg); continue; } @@ -698,6 +810,8 @@ KGVerify::handleVerify() if (ent != fixedEntity) { Debug( "%s->failed()\n", pName.data() ); greet->failed(); + abortRequested = false; + inGreeterPlugin = false; MsgBox( sorrybox, i18n("Authenticated user (%1) does not match requested user (%2).\n") .arg( ent ).arg( fixedEntity ) ); @@ -706,12 +820,19 @@ KGVerify::handleVerify() } Debug( "%s->succeeded()\n", pName.data() ); greet->succeeded(); + abortRequested = false; + inGreeterPlugin = false; handler->verifyOk(); return; } Debug( "%s->failed()\n", pName.data() ); greet->failed(); + abortRequested = false; + inGreeterPlugin = false; + + // Reset password prompt text + setPassPromptText(TQString::null, true); if (ret == V_AUTH) { Debug( " V_AUTH\n" ); @@ -730,23 +851,43 @@ KGVerify::handleVerify() running = true; Debug( "%s->start()\n", pName.data() ); greet->start(); - if (!cont) + if (!cont) { return; + } user = TQString::null; } } +void KGVerify::setPassPromptText(TQString text, bool use_default_text) { + if (themer) { + KdmItem* password_label = themer->findNode("password-label"); + if (password_label) { + KdmLabel* pass_label = static_cast<KdmLabel*>(password_label); + if (use_default_text) { + pass_label->setText(pass_label->lookupStock("password-label")); + } + else { + pass_label->setText(text); + } + pass_label->update(); + themer->updateGeometry(true); + static_cast<TQWidget *>(themer->parent())->repaint(true); + } + } +} + void KGVerify::gplugReturnText( const char *text, int tag ) { - Debug( "%s: gplugReturnText(%\"s, %d)\n", pName.data(), - tag & V_IS_SECRET ? "<masked>" : text, tag ); - GSendStr( text ); + Debug("%s: gplugReturnText(%\"s, %d)\n", pName.data(), tag & V_IS_SECRET ? "<masked>" : text, tag); + GSendStr(text); if (text) { - GSendInt( tag ); + GSendInt(tag); handleVerify(); - } else + } + else { coreLock = 0; + } } void @@ -755,12 +896,13 @@ KGVerify::gplugReturnBinary( const char *data ) if (data) { unsigned const char *up = (unsigned const char *)data; int len = up[3] | (up[2] << 8) | (up[1] << 16) | (up[0] << 24); - Debug( "%s: gplugReturnBinary(%d bytes)\n", pName.data(), len ); - GSendArr( len, data ); + Debug("%s: gplugReturnBinary(%d bytes)\n", pName.data(), len); + GSendArr(len, data); handleVerify(); - } else { - Debug( "%s: gplugReturnBinary(NULL)\n", pName.data() ); - GSendArr( 0, 0 ); + } + else { + Debug("%s: gplugReturnBinary(NULL)\n", pName.data()); + GSendArr(0, 0); coreLock = 0; } } @@ -965,8 +1107,9 @@ KGStdVerify::slotPluginSelected( int id ) delete greet; selectPlugin( id ); handler->verifyPluginChanged( id ); - if (running) + if (running) { start(); + } parent->setUpdatesEnabled( true ); } } @@ -1064,8 +1207,9 @@ KGThemedVerify::slotPluginSelected( int id ) delete greet; selectPlugin( id ); handler->verifyPluginChanged( id ); - if (running) + if (running) { start(); + } } } diff --git a/tdm/kfrontend/kgverify.h b/tdm/kfrontend/kgverify.h index 44fab973a..9935459be 100644 --- a/tdm/kfrontend/kgverify.h +++ b/tdm/kfrontend/kgverify.h @@ -77,6 +77,7 @@ class TQPopupMenu; class TQTimer; class KPushButton; class KLibrary; +class TDECryptographicCardDevice; struct GreeterPluginHandle { KLibrary *library; @@ -100,7 +101,10 @@ class KGVerify : public TQObject, public KGreeterPluginHandler { void presetEntity( const TQString &entity, int field ); TQString getEntity() const; void setUser( const TQString &user ); + void lockUserEntry( const bool lock ); void setPassword( const TQString &pass ); + void setInfoMessageDisplay( bool on ); + void setPasswordPrompt(const TQString &prompt); /* virtual */ void selectPlugin( int id ); bool entitiesLocal() const; bool entitiesFielded() const; @@ -113,6 +117,7 @@ class KGVerify : public TQObject, public KGreeterPluginHandler { void resume(); void accept(); void reject(); + void requestAbort(); int coreLock; @@ -146,6 +151,8 @@ class KGVerify : public TQObject, public KGreeterPluginHandler { bool capsLocked; bool enabled, running, suspended, failed, delayed, cont; bool authTok, isClear, timeable; + bool inGreeterPlugin; + bool abortRequested; static void VMsgBox( TQWidget *parent, const TQString &user, TQMessageBox::Icon type, const TQString &mesg ); static void VErrBox( TQWidget *parent, const TQString &user, const char *msg ); @@ -158,6 +165,7 @@ class KGVerify : public TQObject, public KGreeterPluginHandler { void performAutoLogin(); bool scheduleAutoLogin( bool initial ); void doReject( bool initial ); + void setPassPromptText(TQString text, bool use_default_text=false); private slots: //virtual void slotPluginSelected( int id ) = 0; @@ -173,6 +181,9 @@ class KGVerify : public TQObject, public KGreeterPluginHandler { virtual void gplugMsgBox( TQMessageBox::Icon type, const TQString &text ); static TQVariant getConf( void *ctx, const char *key, const TQVariant &dflt ); + + bool cardLoginInProgress; + TDECryptographicCardDevice* cardLoginDevice; }; class KGStdVerify : public KGVerify { diff --git a/tdm/kfrontend/pics/default1.png b/tdm/kfrontend/pics/default1.png Binary files differindex ef3aef3f9..51d9590b6 100644 --- a/tdm/kfrontend/pics/default1.png +++ b/tdm/kfrontend/pics/default1.png diff --git a/tdm/kfrontend/pics/default2.png b/tdm/kfrontend/pics/default2.png Binary files differindex 194acfe2c..d2ba56f73 100644 --- a/tdm/kfrontend/pics/default2.png +++ b/tdm/kfrontend/pics/default2.png diff --git a/tdm/kfrontend/pics/default3.png b/tdm/kfrontend/pics/default3.png Binary files differindex a8663b15e..34871ff59 100644 --- a/tdm/kfrontend/pics/default3.png +++ b/tdm/kfrontend/pics/default3.png diff --git a/tdm/kfrontend/pics/kdelogo.png b/tdm/kfrontend/pics/kdelogo.png Binary files differindex c89a7f660..647b5c6ea 100644 --- a/tdm/kfrontend/pics/kdelogo.png +++ b/tdm/kfrontend/pics/kdelogo.png diff --git a/tdm/kfrontend/pics/root1.png b/tdm/kfrontend/pics/root1.png Binary files differindex fced75c11..bb00cb807 100644 --- a/tdm/kfrontend/pics/root1.png +++ b/tdm/kfrontend/pics/root1.png diff --git a/tdm/kfrontend/sakdlg.cc b/tdm/kfrontend/sakdlg.cc index 1f1adefdf..3758a4719 100644 --- a/tdm/kfrontend/sakdlg.cc +++ b/tdm/kfrontend/sakdlg.cc @@ -10,6 +10,11 @@ #include <dmctl.h> +#include <ksslcertificate.h> + +#include <tdehardwaredevices.h> +#include <tdecryptographiccarddevice.h> + #include <tdeapplication.h> #include <tdelocale.h> #include <kpushbutton.h> @@ -87,64 +92,75 @@ extern bool trinity_desktop_lock_use_sak; // SAKDlg::SAKDlg(TQWidget *parent) : TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), - mUnlockingFailed(false), closingDown(false) + closingDown(false), mUnlockingFailed(false) { - if (trinity_desktop_lock_use_system_modal_dialogs) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - } - setCaption(TDM_LOGIN_SCREEN_BASE_TITLE); - - frame = new TQFrame( this ); - if (trinity_desktop_lock_use_system_modal_dialogs) - frame->setFrameStyle( TQFrame::NoFrame ); - else - frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); - frame->setLineWidth( 2 ); - - KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); - - KUser user; - - mStatusLabel = new TQLabel( "<b> </b>", frame ); - mStatusLabel->setAlignment( TQLabel::AlignVCenter ); - - TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); - unlockDialogLayout->addWidget( frame ); - - TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); - layStatus->addWidget( mStatusLabel ); - - frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft ); - frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter); - - mStatusLabel->setText("<b>" + i18n("Press Ctrl+Alt+Del to begin.") + "</b><p>" + i18n("This process helps keep your password secure.") + "<br>" + i18n("It prevents unauthorized users from emulating the login screen.")); - - installEventFilter(this); - - mSAKProcess = new TDEProcess; - *mSAKProcess << "tdmtsak" << "dm"; - connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited())); - mSAKProcess->start(); - - mControlPipeHandlerThread = new TQEventLoopThread(); - mControlPipeHandler = new ControlPipeHandlerObject(); - mControlPipeHandler->mSAKDlgParent = this; - mControlPipeHandler->moveToThread(mControlPipeHandlerThread); - TQObject::connect(mControlPipeHandler, SIGNAL(processCommand(TQString)), this, SLOT(processInputPipeCommand(TQString))); - TQTimer::singleShot(0, mControlPipeHandler, SLOT(run())); - mControlPipeHandlerThread->start(); + if (trinity_desktop_lock_use_system_modal_dialogs) { + // Signal that we do not want any window controls to be shown at all + Atom kde_wm_system_modal_notification; + kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); + XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); + } + setCaption(TDM_LOGIN_SCREEN_BASE_TITLE); + + frame = new TQFrame( this ); + if (trinity_desktop_lock_use_system_modal_dialogs) + frame->setFrameStyle( TQFrame::NoFrame ); + else + frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); + frame->setLineWidth( 2 ); + + KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); + + KUser user; + + mStatusLabel = new TQLabel( "<b> </b>", frame ); + mStatusLabel->setAlignment( TQLabel::AlignVCenter ); + + TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); + unlockDialogLayout->addWidget( frame ); + + TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); + layStatus->addWidget( mStatusLabel ); + + frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft ); + frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter); + + mStatusLabel->setText("<b>" + i18n("Press Ctrl+Alt+Del to begin.") + "</b><p>" + i18n("This process helps keep your password secure.") + "<br>" + i18n("It prevents unauthorized users from emulating the login screen.")); + + installEventFilter(this); + + mSAKProcess = new TDEProcess; + *mSAKProcess << "tdmtsak" << "dm"; + connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited())); + mSAKProcess->start(); + + // Initialize SmartCard readers + TDEGenericDevice *hwdevice; + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard); + for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) { + TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice); + connect(cdevice, TQT_SIGNAL(certificateListAvailable(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardInserted(TDECryptographicCardDevice*))); + connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardRemoved(TDECryptographicCardDevice*))); + cdevice->enableCardMonitoring(true); + } + + mControlPipeHandlerThread = new TQEventLoopThread(); + mControlPipeHandler = new ControlPipeHandlerObject(); + mControlPipeHandler->mSAKDlgParent = this; + mControlPipeHandler->moveToThread(mControlPipeHandlerThread); + TQObject::connect(mControlPipeHandler, SIGNAL(processCommand(TQString)), this, SLOT(processInputPipeCommand(TQString))); + TQTimer::singleShot(0, mControlPipeHandler, SLOT(run())); + mControlPipeHandlerThread->start(); } void SAKDlg::slotSAKProcessExited() { - int retcode = mSAKProcess->exitStatus(); - if (retcode != 0) trinity_desktop_lock_use_sak = false; - closingDown = true; - hide(); + int retcode = mSAKProcess->exitStatus(); + if (retcode != 0) trinity_desktop_lock_use_sak = false; + closingDown = true; + hide(); } void SAKDlg::processInputPipeCommand(TQString command) { @@ -155,41 +171,89 @@ void SAKDlg::processInputPipeCommand(TQString command) { } } +void SAKDlg::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) { + TQString login_name = TQString::null; + X509CertificatePtrList certList = cdevice->cardX509Certificates(); + if (certList.count() > 0) { + KSSLCertificate* card_cert = NULL; + card_cert = KSSLCertificate::fromX509(certList[0]); + TQStringList cert_subject_parts = TQStringList::split("/", card_cert->getSubject(), false); + for (TQStringList::Iterator it = cert_subject_parts.begin(); it != cert_subject_parts.end(); ++it ) { + TQString lcpart = (*it).lower(); + if (lcpart.startsWith("cn=")) { + login_name = lcpart.right(lcpart.length() - strlen("cn=")); + } + } + delete card_cert; + } + + if (login_name != "") { + DM dm; + SessList sess; + bool vt_active = false; + bool user_active = false; + if (dm.localSessions(sess)) { + TQString user, loc; + for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + DM::sess2Str2(*it, user, loc); + if (user.startsWith(login_name + ": ")) { + // Found active session + user_active = true; + } + if ((*it).self) { + if ((*it).vt == dm.activeVT()) { + vt_active = true; + } + } + } + } + + if (!user_active && vt_active) { + // Terminate SAK dialog + closeDialogForced(); + } + } +} + +void SAKDlg::cryptographicCardRemoved(TDECryptographicCardDevice* cdevice) { + // +} + SAKDlg::~SAKDlg() { - if ((mSAKProcess) && (mSAKProcess->isRunning())) { - mSAKProcess->kill(SIGTERM); - delete mSAKProcess; - } + if ((mSAKProcess) && (mSAKProcess->isRunning())) { + mSAKProcess->kill(SIGKILL); + delete mSAKProcess; + } - mControlPipeHandlerThread->terminate(); - mControlPipeHandlerThread->wait(); - delete mControlPipeHandler; -// delete mControlPipeHandlerThread; + mControlPipeHandlerThread->terminate(); + mControlPipeHandlerThread->wait(); + delete mControlPipeHandler; +// delete mControlPipeHandlerThread; - hide(); + hide(); } void SAKDlg::closeDialogForced() { - TQDialog::reject(); + TQDialog::reject(); } void SAKDlg::reject() { - + // } void SAKDlg::updateLabel(TQString &txt) { - mStatusLabel->setPaletteForegroundColor(Qt::black); - mStatusLabel->setText("<b>" + txt + "</b>"); + mStatusLabel->setPaletteForegroundColor(Qt::black); + mStatusLabel->setText("<b>" + txt + "</b>"); } void SAKDlg::show() { - TQDialog::show(); - TQApplication::flushX(); + TQDialog::show(); + TQApplication::flushX(); } #include "sakdlg.moc" diff --git a/tdm/kfrontend/sakdlg.h b/tdm/kfrontend/sakdlg.h index 22d5ec869..fd77dd028 100644 --- a/tdm/kfrontend/sakdlg.h +++ b/tdm/kfrontend/sakdlg.h @@ -22,6 +22,7 @@ class TQLabel; class KPushButton; class TQListView; class SAKDlg; +class TDECryptographicCardDevice; //=========================================================================== // @@ -30,40 +31,44 @@ class SAKDlg; // class SAKDlg : public TQDialog { - Q_OBJECT - -public: - SAKDlg(TQWidget *parent); - ~SAKDlg(); - virtual void show(); - - void updateLabel( TQString &txt ); - void closeDialogForced(); - -private slots: - void slotSAKProcessExited(); - void processInputPipeCommand(TQString command); - -protected slots: - virtual void reject(); - -private: - TQFrame *frame; - TQGridLayout *frameLayout; - TQLabel *mStatusLabel; - int mCapsLocked; - bool mUnlockingFailed; - TQStringList layoutsList; - TQStringList::iterator currLayout; - int sPid, sFd; - TDEProcess* mSAKProcess; - ControlPipeHandlerObject* mControlPipeHandler; - TQEventLoopThread* mControlPipeHandlerThread; - -protected: - bool closingDown; - - friend class ControlPipeHandlerObject; + Q_OBJECT + + public: + SAKDlg(TQWidget *parent); + ~SAKDlg(); + virtual void show(); + + void updateLabel( TQString &txt ); + void closeDialogForced(); + + private slots: + void slotSAKProcessExited(); + void processInputPipeCommand(TQString command); + + protected slots: + virtual void reject(); + + private slots: + void cryptographicCardInserted(TDECryptographicCardDevice*); + void cryptographicCardRemoved(TDECryptographicCardDevice*); + + protected: + bool closingDown; + + private: + TQFrame *frame; + TQGridLayout *frameLayout; + TQLabel *mStatusLabel; + int mCapsLocked; + bool mUnlockingFailed; + TQStringList layoutsList; + TQStringList::iterator currLayout; + int sPid, sFd; + TDEProcess* mSAKProcess; + ControlPipeHandlerObject* mControlPipeHandler; + TQEventLoopThread* mControlPipeHandlerThread; + + friend class ControlPipeHandlerObject; }; #endif diff --git a/tdm/kfrontend/sessions/tde.desktop.cmake b/tdm/kfrontend/sessions/tde.desktop.cmake index c23a33205..8eb5ede82 100644 --- a/tdm/kfrontend/sessions/tde.desktop.cmake +++ b/tdm/kfrontend/sessions/tde.desktop.cmake @@ -3,6 +3,7 @@ Encoding=UTF-8 Type=XSession Exec=@TDE_BIN_DIR@/starttde TryExec=@TDE_BIN_DIR@/starttde +DesktopNames=Trinity Name=TDE Name[hi]=केडीई Name[mn]=КДЭ diff --git a/tdm/kfrontend/sessions/tde.desktop.in b/tdm/kfrontend/sessions/tde.desktop.in index b9472453f..fd1e972b4 100644 --- a/tdm/kfrontend/sessions/tde.desktop.in +++ b/tdm/kfrontend/sessions/tde.desktop.in @@ -3,6 +3,7 @@ Encoding=UTF-8 Type=XSession Exec=@TDE_BINDIR@/starttde TryExec=@TDE_BINDIR@/starttde +DesktopNames=Trinity Name=Trinity Name[hi]=केडीई Name[mn]=КДЭ diff --git a/tdm/kfrontend/tdm_greet.c b/tdm/kfrontend/tdm_greet.c index c90ebc1c9..6f8c84caf 100644 --- a/tdm/kfrontend/tdm_greet.c +++ b/tdm/kfrontend/tdm_greet.c @@ -568,11 +568,16 @@ xkb_modifier_mask_work( XkbDescPtr xkb, const char *name ) return 0; for (i = 0; i < XkbNumVirtualMods; i++) { char *modStr = XGetAtomName( xkb->dpy, xkb->names->vmods[i] ); - if (modStr != NULL && strcmp( name, modStr ) == 0) { + if( modStr == NULL ) { + continue; + } + if( strcmp( name, modStr ) == 0 ) { unsigned int mask; XkbVirtualModsToReal( xkb, 1 << i, &mask ); + XFree(modStr); return mask; } + XFree(modStr); } return 0; } @@ -779,7 +784,12 @@ main( int argc ATTR_UNUSED, char **argv ) LogPanic( "Cannot save $HOME\n" ); atexit( cleanup ); - setenv( "LC_ALL", _language, 1 ); + if ( getenv( "LANG" ) == NULL ) { + setenv( "LC_ALL", _language, 1 ); + } + else { + setenv( "LC_ALL", getenv( "LANG" ), 1 ); + } kg_main( argv[0] ); diff --git a/tdm/kfrontend/themer/tdmitem.cpp b/tdm/kfrontend/themer/tdmitem.cpp index f5eabdb56..26a4887c1 100644 --- a/tdm/kfrontend/themer/tdmitem.cpp +++ b/tdm/kfrontend/themer/tdmitem.cpp @@ -204,6 +204,22 @@ KdmItem::findNode( const TQString &_id ) const return 0; } +KdmItem * +KdmItem::findNodeByType( const TQString &_type ) const +{ + if (itemType == _type) + return const_cast<KdmItem *>( this ); + + TQValueList<KdmItem *>::ConstIterator it; + for (it = m_children.begin(); it != m_children.end(); ++it) { + KdmItem *t = (*it)->findNodeByType( _type ); + if (t) + return t; + } + + return 0; +} + void KdmItem::setWidget( TQWidget *widget ) { @@ -336,11 +352,6 @@ KdmItem::paint( TQPainter *p, const TQRect &rect ) else { // We have compositing support! TQRgb blend_color = tqRgba(m_backgroundModifier, m_backgroundModifier, m_backgroundModifier, 0); // RGBA overlay - float alpha = tqAlpha(blend_color) / 255.; - int pixel = tqAlpha(blend_color) << 24 | - int(tqRed(blend_color) * alpha) << 16 | - int(tqGreen(blend_color) * alpha) << 8 | - int(tqBlue(blend_color) * alpha); TQImage img( myWidget->size(), 32 ); img = img.convertDepth(32); diff --git a/tdm/kfrontend/themer/tdmitem.h b/tdm/kfrontend/themer/tdmitem.h index be7fa65d3..d2aeed69c 100644 --- a/tdm/kfrontend/themer/tdmitem.h +++ b/tdm/kfrontend/themer/tdmitem.h @@ -152,6 +152,7 @@ public: } KdmItem *findNode( const TQString &id ) const; + KdmItem *findNodeByType( const TQString &type ) const; virtual void setWidget( TQWidget *widget ); TQWidget *widget() const { return myWidget; } virtual void setLayoutItem( TQLayoutItem *item ); diff --git a/tdm/kfrontend/themer/tdmlabel.h b/tdm/kfrontend/themer/tdmlabel.h index 8b955fca5..e45d68091 100644 --- a/tdm/kfrontend/themer/tdmlabel.h +++ b/tdm/kfrontend/themer/tdmlabel.h @@ -40,6 +40,9 @@ public: KdmLabel( KdmItem *parent, const TQDomNode &node, const char *name = 0 ); void setText( const TQString &txt ); + /* Method to lookup the caption associated with an item */ + TQString lookupStock( const TQString &stock ); + protected: // reimplemented; returns the minimum size of rendered text virtual TQSize sizeHint(); @@ -71,9 +74,6 @@ public slots: void slotAccel(); private: - /* Method to lookup the caption associated with an item */ - TQString lookupStock( const TQString &stock ); - /* Lookup variables in the text */ TQString lookupText( const TQString &t ); diff --git a/tdm/kfrontend/themer/tdmthemer.cpp b/tdm/kfrontend/themer/tdmthemer.cpp index d6d051cf8..6c27b7629 100644 --- a/tdm/kfrontend/themer/tdmthemer.cpp +++ b/tdm/kfrontend/themer/tdmthemer.cpp @@ -117,6 +117,12 @@ KdmThemer::findNode( const TQString &item ) const return rootItem->findNode( item ); } +KdmItem * +KdmThemer::findNodeByType( const TQString &item ) const +{ + return rootItem->findNodeByType( item ); +} + void KdmThemer::updateGeometry( bool force ) { diff --git a/tdm/kfrontend/themer/tdmthemer.h b/tdm/kfrontend/themer/tdmthemer.h index 2b8865b4d..785a116da 100644 --- a/tdm/kfrontend/themer/tdmthemer.h +++ b/tdm/kfrontend/themer/tdmthemer.h @@ -72,6 +72,7 @@ public: virtual // just to put the reference in the vmt KdmItem *findNode( const TQString & ) const; + KdmItem *findNodeByType( const TQString & ) const; void updateGeometry( bool force ); // force = true for external calls diff --git a/tdm/kfrontend/themes/circles/circles.xml b/tdm/kfrontend/themes/circles/circles.xml index 0596e0ee7..102cae7b7 100644 --- a/tdm/kfrontend/themes/circles/circles.xml +++ b/tdm/kfrontend/themes/circles/circles.xml @@ -165,13 +165,13 @@ <normal color="#FF8080" alpha="0.0"/> <pos anchor="w" y="50%" width="box" height="box"/> <box orientation="vertical" xpadding="0" ypadding="0" spacing="14"> - <item type="label"> + <item type="label" id="username-label"> <pos anchor="ne" x="100%"/> <normal color="#000000" font="Sans 12"/> <!-- Stock label for: Username: --> <stock type="username-label"/> </item> - <item type="label"> + <item type="label" id="password-label"> <pos anchor="ne" x="100%"/> <normal color="#000000" font="Sans 12"/> <!-- Stock label for: Password: --> diff --git a/tdm/kfrontend/themes/circles/flower.png b/tdm/kfrontend/themes/circles/flower.png Binary files differindex 92d25f32d..3dd4a788f 100644 --- a/tdm/kfrontend/themes/circles/flower.png +++ b/tdm/kfrontend/themes/circles/flower.png diff --git a/tdm/kfrontend/themes/circles/help.png b/tdm/kfrontend/themes/circles/help.png Binary files differindex b38b48a6d..700f1bdbe 100644 --- a/tdm/kfrontend/themes/circles/help.png +++ b/tdm/kfrontend/themes/circles/help.png diff --git a/tdm/kfrontend/themes/circles/options.png b/tdm/kfrontend/themes/circles/options.png Binary files differindex 3c08e02d4..0c7bde1d7 100644 --- a/tdm/kfrontend/themes/circles/options.png +++ b/tdm/kfrontend/themes/circles/options.png diff --git a/tdm/kfrontend/themes/circles/screenshot.png b/tdm/kfrontend/themes/circles/screenshot.png Binary files differindex 7120b03d5..3fad7e649 100644 --- a/tdm/kfrontend/themes/circles/screenshot.png +++ b/tdm/kfrontend/themes/circles/screenshot.png diff --git a/tdm/kfrontend/themes/minimalist/background.png b/tdm/kfrontend/themes/minimalist/background.png Binary files differindex 8cc7a1a33..b956f9347 100644 --- a/tdm/kfrontend/themes/minimalist/background.png +++ b/tdm/kfrontend/themes/minimalist/background.png diff --git a/tdm/kfrontend/themes/minimalist/box.png b/tdm/kfrontend/themes/minimalist/box.png Binary files differindex 7925e0985..adca1c529 100644 --- a/tdm/kfrontend/themes/minimalist/box.png +++ b/tdm/kfrontend/themes/minimalist/box.png diff --git a/tdm/kfrontend/themes/minimalist/caps-lock-warning.png b/tdm/kfrontend/themes/minimalist/caps-lock-warning.png Binary files differindex 66370890d..f35c86ac1 100644 --- a/tdm/kfrontend/themes/minimalist/caps-lock-warning.png +++ b/tdm/kfrontend/themes/minimalist/caps-lock-warning.png diff --git a/tdm/kfrontend/themes/minimalist/lineedit.png b/tdm/kfrontend/themes/minimalist/lineedit.png Binary files differindex 6640a00a7..4dcd31c7c 100644 --- a/tdm/kfrontend/themes/minimalist/lineedit.png +++ b/tdm/kfrontend/themes/minimalist/lineedit.png diff --git a/tdm/kfrontend/themes/minimalist/login_normal.png b/tdm/kfrontend/themes/minimalist/login_normal.png Binary files differindex a652cad47..db001ad46 100644 --- a/tdm/kfrontend/themes/minimalist/login_normal.png +++ b/tdm/kfrontend/themes/minimalist/login_normal.png diff --git a/tdm/kfrontend/themes/minimalist/login_prelight.png b/tdm/kfrontend/themes/minimalist/login_prelight.png Binary files differindex 852b0fcc9..6bfb0d421 100644 --- a/tdm/kfrontend/themes/minimalist/login_prelight.png +++ b/tdm/kfrontend/themes/minimalist/login_prelight.png diff --git a/tdm/kfrontend/themes/minimalist/minimalist.xml b/tdm/kfrontend/themes/minimalist/minimalist.xml index f1dfada8f..dd9036799 100644 --- a/tdm/kfrontend/themes/minimalist/minimalist.xml +++ b/tdm/kfrontend/themes/minimalist/minimalist.xml @@ -37,7 +37,7 @@ </item> <!-- user field --> - <item type="label"> + <item type="label" id="username-label"> <pos anchor="nw" x="145" y="225"/> <normal font="Sans 11" color="#dfdbd2"/> <stock type="username-label"/> @@ -58,7 +58,7 @@ <!-- password field --> - <item type="label"> + <item type="label" id="password-label"> <pos anchor="nw" x="145" y="285"/> <normal font="Sans 11" color="#dfdbd2"/> <stock type="password-label"/> diff --git a/tdm/kfrontend/themes/minimalist/screenshot.png b/tdm/kfrontend/themes/minimalist/screenshot.png Binary files differindex 73da3a8ac..488addfc0 100644 --- a/tdm/kfrontend/themes/minimalist/screenshot.png +++ b/tdm/kfrontend/themes/minimalist/screenshot.png diff --git a/tdm/kfrontend/themes/minimalist/session_normal.png b/tdm/kfrontend/themes/minimalist/session_normal.png Binary files differindex f9a961922..4eee6830c 100644 --- a/tdm/kfrontend/themes/minimalist/session_normal.png +++ b/tdm/kfrontend/themes/minimalist/session_normal.png diff --git a/tdm/kfrontend/themes/minimalist/session_prelight.png b/tdm/kfrontend/themes/minimalist/session_prelight.png Binary files differindex 55166ced0..38ef5c8b4 100644 --- a/tdm/kfrontend/themes/minimalist/session_prelight.png +++ b/tdm/kfrontend/themes/minimalist/session_prelight.png diff --git a/tdm/kfrontend/themes/minimalist/system_normal.png b/tdm/kfrontend/themes/minimalist/system_normal.png Binary files differindex ecddb542b..69f75aa49 100644 --- a/tdm/kfrontend/themes/minimalist/system_normal.png +++ b/tdm/kfrontend/themes/minimalist/system_normal.png diff --git a/tdm/kfrontend/themes/minimalist/system_prelight.png b/tdm/kfrontend/themes/minimalist/system_prelight.png Binary files differindex b6495eabd..5f8c30e86 100644 --- a/tdm/kfrontend/themes/minimalist/system_prelight.png +++ b/tdm/kfrontend/themes/minimalist/system_prelight.png diff --git a/tdm/kfrontend/themes/minimalist/topline.png b/tdm/kfrontend/themes/minimalist/topline.png Binary files differindex 063d72da6..de12c82c1 100644 --- a/tdm/kfrontend/themes/minimalist/topline.png +++ b/tdm/kfrontend/themes/minimalist/topline.png diff --git a/tdm/kfrontend/themes/o2_enterprise/Dialog.png b/tdm/kfrontend/themes/o2_enterprise/Dialog.png Binary files differindex d38a35983..521ef66d6 100644 --- a/tdm/kfrontend/themes/o2_enterprise/Dialog.png +++ b/tdm/kfrontend/themes/o2_enterprise/Dialog.png diff --git a/tdm/kfrontend/themes/o2_enterprise/enter_normal.png b/tdm/kfrontend/themes/o2_enterprise/enter_normal.png Binary files differindex c859ce5df..b612f5062 100644 --- a/tdm/kfrontend/themes/o2_enterprise/enter_normal.png +++ b/tdm/kfrontend/themes/o2_enterprise/enter_normal.png diff --git a/tdm/kfrontend/themes/o2_enterprise/enter_over.png b/tdm/kfrontend/themes/o2_enterprise/enter_over.png Binary files differindex f1252a55a..27a18fb69 100644 --- a/tdm/kfrontend/themes/o2_enterprise/enter_over.png +++ b/tdm/kfrontend/themes/o2_enterprise/enter_over.png diff --git a/tdm/kfrontend/themes/o2_enterprise/enter_pressed.png b/tdm/kfrontend/themes/o2_enterprise/enter_pressed.png Binary files differindex c859ce5df..b612f5062 100644 --- a/tdm/kfrontend/themes/o2_enterprise/enter_pressed.png +++ b/tdm/kfrontend/themes/o2_enterprise/enter_pressed.png diff --git a/tdm/kfrontend/themes/o2_enterprise/enterprise.xml b/tdm/kfrontend/themes/o2_enterprise/enterprise.xml index 39f159b00..11b87ae03 100644 --- a/tdm/kfrontend/themes/o2_enterprise/enterprise.xml +++ b/tdm/kfrontend/themes/o2_enterprise/enterprise.xml @@ -54,12 +54,12 @@ <normal alpha="0.0" color="#000000" /> <pos width="box" y="50%" anchor="w" height="box" /> <box xpadding="10" spacing="10" ypadding="0" orientation="vertical" > - <item type="label" > + <item type="label" id="username-label"> <pos x="100%" anchor="ne" /> <normal color="#000000" font="Sans Condensed 10" /> <stock type="username-label" /> </item> - <item type="label" > + <item type="label" id="password-label"> <pos x="100%" anchor="ne" /> <normal color="#000000" font="Sans Condensed 10" /> <stock type="password-label" /> diff --git a/tdm/kfrontend/themes/o2_enterprise/preview.png b/tdm/kfrontend/themes/o2_enterprise/preview.png Binary files differindex f7712d7d2..ed2fe9ee7 100644 --- a/tdm/kfrontend/themes/o2_enterprise/preview.png +++ b/tdm/kfrontend/themes/o2_enterprise/preview.png diff --git a/tdm/kfrontend/themes/o2_enterprise/system_normal.png b/tdm/kfrontend/themes/o2_enterprise/system_normal.png Binary files differindex ea9b1bdfa..a6b7826d2 100644 --- a/tdm/kfrontend/themes/o2_enterprise/system_normal.png +++ b/tdm/kfrontend/themes/o2_enterprise/system_normal.png diff --git a/tdm/kfrontend/themes/o2_enterprise/system_over.png b/tdm/kfrontend/themes/o2_enterprise/system_over.png Binary files differindex 7d535efc8..afb939954 100644 --- a/tdm/kfrontend/themes/o2_enterprise/system_over.png +++ b/tdm/kfrontend/themes/o2_enterprise/system_over.png diff --git a/tdm/kfrontend/themes/o2_enterprise/system_pressed.png b/tdm/kfrontend/themes/o2_enterprise/system_pressed.png Binary files differindex ea9b1bdfa..a6b7826d2 100644 --- a/tdm/kfrontend/themes/o2_enterprise/system_pressed.png +++ b/tdm/kfrontend/themes/o2_enterprise/system_pressed.png diff --git a/tdmlib/CMakeLists.txt b/tdmlib/CMakeLists.txt index 3341e9157..7f6fbbbcc 100644 --- a/tdmlib/CMakeLists.txt +++ b/tdmlib/CMakeLists.txt @@ -67,7 +67,7 @@ if( BUILD_KICKER OR BUILD_KDESKTOP OR BUILD_TDM OR tde_add_library( dmctl STATIC_PIC SOURCES dmctl.cpp - LINK Xau + LINK tdecore-shared Xau ) endif( ) @@ -77,7 +77,7 @@ endif( ) if( BUILD_TSAK ) tde_add_executable( tdmtsak SOURCES tdmtsak.cpp - LINK ${TQT_LIBRARIES} + LINK ${TQT_LIBRARIES} dmctl-static DESTINATION ${BIN_INSTALL_DIR} SETUID DESCRIPTION "Secure Attention Key interface for TDM" diff --git a/tdmlib/dmctl.cpp b/tdmlib/dmctl.cpp index 75e88fc6e..00c3cb489 100644 --- a/tdmlib/dmctl.cpp +++ b/tdmlib/dmctl.cpp @@ -25,6 +25,7 @@ #include <dcopclient.h> #include <tqregexp.h> +#include <tqfile.h> #include <X11/Xauth.h> #include <X11/Xlib.h> @@ -37,8 +38,34 @@ #include <fcntl.h> #include <errno.h> +#include <config.h> + +static TQString readcfg(const char *cfg_file) { + TQString ctl = "/var/run/xdmctl"; + + TQStringList lines; + TQFile file(cfg_file); + if ( file.open( IO_ReadOnly ) ) { + TQTextStream stream(&file); + TQString line; + while ( !stream.atEnd() ) { + line = stream.readLine(); + TQStringList keyvaluepair = TQStringList::split("=", line, false); + if (keyvaluepair.count() > 1) { + if (keyvaluepair[0].lower() == "FifoDir") { + ctl = keyvaluepair[1]; + } + } + } + file.close(); + } + + return ctl; +} + static int DMType = DM::Unknown; -static const char *ctl, *dpy; +static const char *dpy; +static TQString ctl; DM::DM() : fd( -1 ) { @@ -46,16 +73,27 @@ DM::DM() : fd( -1 ) struct sockaddr_un sa; if (DMType == Unknown) { - if (!(dpy = ::getenv( "DISPLAY" ))) - DMType = NoDM; - else if ((ctl = ::getenv( "DM_CONTROL" ))) + if (!(dpy = ::getenv( "DISPLAY" ))) { + // Try to read TDM control file + if ((ctl = readcfg(KDE_CONFDIR "/tdm/tdmrc")) != TQString::null) { + DMType = NewTDM; + } + else { + DMType = NoDM; + } + } + else if ((ctl = ::getenv( "DM_CONTROL" )) != TQString::null) { DMType = NewTDM; - else if ((ctl = ::getenv( "XDM_MANAGED" )) && ctl[0] == '/') + } + else if (((ctl = ::getenv( "XDM_MANAGED" )) != TQString::null) && ctl[0] == '/') { DMType = OldTDM; - else if (::getenv( "GDMSESSION" )) + } + else if (::getenv( "GDMSESSION" )) { DMType = GDM; - else + } + else { DMType = NoDM; + } } switch (DMType) { default: @@ -76,12 +114,17 @@ DM::DM() : fd( -1 ) } } GDMAuthenticate(); - } else { - if ((ptr = const_cast<char*>(strchr( dpy, ':' )))) - ptr = strchr( ptr, '.' ); - snprintf( sa.sun_path, sizeof(sa.sun_path), - "%s/dmctl-%.*s/socket", - ctl, ptr ? int(ptr - dpy) : 512, dpy ); + } + else { + if (!dpy) { + snprintf( sa.sun_path, sizeof(sa.sun_path), "%s/dmctl/socket", ctl.ascii() ); + } + else { + if ((ptr = const_cast<char*>(strchr( dpy, ':' )))) { + ptr = strchr( ptr, '.' ); + } + snprintf( sa.sun_path, sizeof(sa.sun_path), "%s/dmctl-%.*s/socket", ctl.ascii(), ptr ? int(ptr - dpy) : 512, dpy ); + } if (::connect( fd, (struct sockaddr *)&sa, sizeof(sa) )) { ::close( fd ); fd = -1; @@ -100,8 +143,9 @@ DM::DM() : fd( -1 ) DM::~DM() { - if (fd >= 0) + if (fd >= 0) { close( fd ); + } } bool @@ -172,13 +216,15 @@ DM::exec( const char *cmd, TQCString &buf ) bool DM::canShutdown() { - if (DMType == OldTDM) - return strstr( ctl, ",maysd" ) != 0; + if (DMType == OldTDM) { + return strstr( ctl.ascii(), ",maysd" ) != 0; + } TQCString re; - if (DMType == GDM) + if (DMType == GDM) { return exec( "QUERY_LOGOUT_ACTION\n", re ) && re.find("HALT") >= 0; + } return exec( "caps\n", re ) && re.find( "\tshutdown" ) >= 0; } @@ -282,7 +328,7 @@ DM::numReserve() return 1; /* Bleh */ if (DMType == OldTDM) - return strstr( ctl, ",rsvd" ) ? 1 : -1; + return strstr( ctl.ascii(), ",rsvd" ) ? 1 : -1; TQCString re; int p; @@ -304,8 +350,9 @@ DM::startReserve() bool DM::localSessions( SessList &list ) { - if (DMType == OldTDM) + if (DMType == OldTDM) { return false; + } TQCString re; @@ -325,8 +372,9 @@ DM::localSessions( SessList &list ) list.append( se ); } } else { - if (!exec( "list\talllocal\n", re )) + if (!exec( "list\talllocal\n", re )) { return false; + } TQStringList sess = TQStringList::split( TQChar('\t'), re.data() + 3 ); for (TQStringList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { TQStringList ts = TQStringList::split( TQChar(','), *it, true ); diff --git a/tdmlib/dmctl.h b/tdmlib/dmctl.h index 90928e2e3..e0cdc966c 100644 --- a/tdmlib/dmctl.h +++ b/tdmlib/dmctl.h @@ -39,27 +39,33 @@ public: DM(); ~DM(); - enum { Unknown, NoDM, NewTDM, OldTDM, GDM }; + enum { + Unknown, + NoDM, + NewTDM, + OldTDM, + GDM + }; bool canShutdown(); - void shutdown( TDEApplication::ShutdownType shutdownType, - TDEApplication::ShutdownMode shutdownMode, - const TQString &bootOption = TQString::null ); + void shutdown(TDEApplication::ShutdownType shutdownType, + TDEApplication::ShutdownMode shutdownMode, + const TQString &bootOption = TQString::null); - void setLock( bool on ); + void setLock(bool on); bool isSwitchable(); int numReserve(); void startReserve(); - bool localSessions( SessList &list ); - bool switchVT( int vt ); - void lockSwitchVT( int vt ); + bool localSessions(SessList &list); + bool switchVT(int vt); + void lockSwitchVT(int vt); int activeVT(); - bool bootOptions( TQStringList &opts, int &dflt, int &curr ); + bool bootOptions(TQStringList &opts, int &dflt, int &curr); - static TQString sess2Str( const SessEnt &se ); - static void sess2Str2( const SessEnt &se, TQString &user, TQString &loc ); + static TQString sess2Str(const SessEnt &se); + static void sess2Str2(const SessEnt &se, TQString &user, TQString &loc); int type(); diff --git a/tdmlib/kgreet_classic.cpp b/tdmlib/kgreet_classic.cpp index 3d1cedc19..d22f6979f 100644 --- a/tdmlib/kgreet_classic.cpp +++ b/tdmlib/kgreet_classic.cpp @@ -45,6 +45,15 @@ protected: static int echoMode; +TQString KClassicGreeter::passwordPrompt() { + if (func == Authenticate) { + return i18n("&Password:"); + } + else { + return i18n("Current &password:"); + } +} + KClassicGreeter::KClassicGreeter( KGreeterPluginHandler *_handler, KdmThemer *themer, TQWidget *parent, TQWidget *pred, @@ -57,10 +66,12 @@ KClassicGreeter::KClassicGreeter( KGreeterPluginHandler *_handler, ctx( _ctx ), exp( -1 ), pExp( -1 ), - running( false ) + running( false ), + userEntryLocked(false), + suppressInfoMsg(false) { KdmItem *user_entry = 0, *pw_entry = 0; - TQGridLayout *grid = 0; + grid = 0; int line = 0; layoutItem = 0; @@ -120,11 +131,7 @@ KClassicGreeter::KClassicGreeter( KGreeterPluginHandler *_handler, passwdEdit->adjustSize(); pw_entry->setWidget( passwdEdit ); } else { - passwdLabel = new TQLabel( passwdEdit, - func == Authenticate ? - i18n("&Password:") : - i18n("Current &password:"), - parent ); + passwdLabel = new TQLabel( passwdEdit, passwordPrompt(), parent ); grid->addWidget( passwdLabel, line, 0 ); grid->addWidget( passwdEdit, line++, 1 ); } @@ -217,6 +224,11 @@ KClassicGreeter::setUser( const TQString &user ) passwdEdit->selectAll(); } +void KClassicGreeter::lockUserEntry( const bool lock ) { + userEntryLocked = lock; + loginEdit->setEnabled(!lock); +} + void // virtual KClassicGreeter::setPassword( const TQString &pass ) { @@ -237,6 +249,27 @@ KClassicGreeter::setEnabled( bool enable ) passwdEdit->setFocus(); } +void KClassicGreeter::setInfoMessageDisplay(bool enable) { + suppressInfoMsg = !enable; +} + +void KClassicGreeter::setPasswordPrompt(const TQString &prompt) { + if (passwdLabel) { + passwdPromptCustomString = prompt; + + if (prompt != TQString::null) { + passwdLabel->setText(prompt); + } + else { + passwdLabel->setText(passwordPrompt()); + } + if (grid) { + grid->invalidate(); + grid->activate(); + } + } +} + void // private KClassicGreeter::returnData() { @@ -267,8 +300,19 @@ bool // virtual KClassicGreeter::textMessage( const char *text, bool err ) { if (!err && - TQString( text ).find( TQRegExp( "^Changing password for [^ ]+$" ) ) >= 0) + TQString( text ).find( TQRegExp( "^Changing password for [^ ]+$" ) ) >= 0) { + return true; + } + if (!err && suppressInfoMsg) { return true; + } + if ((!err && ((TQString(text).lower().find("smartcard") >= 0) || (TQString(text).lower().find("smart card") >= 0))) + || (err && (TQString(text).lower().find(" 2306:") >= 0)) || (err && (TQString(text).lower().find("PKINIT") >= 0))) { + // FIXME + // pam_pkcs11 is extremely chatty, even with no card inserted, + // and there is no apparent way to disable the unwanted messages! + return true; + } return false; } @@ -276,13 +320,30 @@ void // virtual KClassicGreeter::textPrompt( const char *prompt, bool echo, bool nonBlocking ) { pExp = exp; - if (echo) + if (echo) { exp = 0; - else if (!authTok) + } + else if (!authTok) { exp = 1; + if (passwdLabel) { + if (prompt && (prompt[0] != 0)) { + passwdLabel->setText(prompt); + } + else { + if (passwdPromptCustomString == TQString::null) { + passwdLabel->setText(passwordPrompt()); + } + } + if (grid) { + grid->invalidate(); + grid->activate(); + } + } + } else { TQString pr( prompt ); - if (pr.find( TQRegExp( "\\bpassword\\b", false ) ) >= 0) { + if ((pr.find( TQRegExp( "\\bpassword\\b", false ) ) >= 0) + || (pr.find( TQRegExp( "\\bPIN\\b", false ) ) >= 0)) { if (pr.find( TQRegExp( "\\b(re-?(enter|type)|again|confirm|repeat)\\b", false ) ) >= 0) exp = 3; @@ -294,7 +355,8 @@ KClassicGreeter::textPrompt( const char *prompt, bool echo, bool nonBlocking ) KGreeterPluginHandler::IsSecret ); return; } - } else { + } + else { handler->gplugMsgBox( TQMessageBox::Critical, i18n("Unrecognized prompt \"%1\"") .arg( prompt ) ); @@ -309,8 +371,9 @@ KClassicGreeter::textPrompt( const char *prompt, bool echo, bool nonBlocking ) has = -1; } - if (has >= exp || nonBlocking) + if (has >= exp || nonBlocking) { returnData(); + } } bool // virtual @@ -392,6 +455,15 @@ KClassicGreeter::succeeded() void // virtual KClassicGreeter::failed() { + if (passwdLabel && (passwdPromptCustomString == TQString::null)) { + // reset password prompt + passwdLabel->setText(passwordPrompt()); + if (grid) { + grid->invalidate(); + grid->activate(); + } + } + // assert( running || timed_login ); setActive( false ); setActive2( false ); @@ -402,22 +474,41 @@ KClassicGreeter::failed() void // virtual KClassicGreeter::revive() { - // assert( !running ); - setActive2( true ); + if (passwdLabel && (passwdPromptCustomString == TQString::null)) { + // reset password prompt + passwdLabel->setText(passwordPrompt()); + if (grid) { + grid->invalidate(); + grid->activate(); + } + } + + // assert(!running); + setActive2(true); if (authTok) { - passwd1Edit->erase(); - passwd2Edit->erase(); - passwd1Edit->setFocus(); - } else { + if (passwd1Edit) { + passwd1Edit->erase(); + } + if (passwd2Edit) { + passwd2Edit->erase(); + } + if (passwd1Edit) { + passwd1Edit->setFocus(); + } + } + else { passwdEdit->erase(); - if (loginEdit && loginEdit->isEnabled()) + if (loginEdit && loginEdit->isEnabled()) { passwdEdit->setEnabled( true ); + } else { setActive( true ); - if (loginEdit && loginEdit->text().isEmpty()) + if (loginEdit && loginEdit->text().isEmpty()) { loginEdit->setFocus(); - else + } + else { passwdEdit->setFocus(); + } } } } @@ -425,6 +516,15 @@ KClassicGreeter::revive() void // virtual KClassicGreeter::clear() { + if (passwdLabel && (passwdPromptCustomString == TQString::null)) { + // reset password prompt + passwdLabel->setText(passwordPrompt()); + if (grid) { + grid->invalidate(); + grid->activate(); + } + } + // assert( !running && !passwd1Edit ); passwdEdit->erase(); if (loginEdit) { @@ -441,10 +541,17 @@ KClassicGreeter::clear() void KClassicGreeter::setActive( bool enable ) { - if (loginEdit) - loginEdit->setEnabled( enable ); - if (passwdEdit) + if (loginEdit) { + if (userEntryLocked) { + loginEdit->setEnabled( false ); + } + else { + loginEdit->setEnabled( enable ); + } + } + if (passwdEdit) { passwdEdit->setEnabled( enable ); + } } void diff --git a/tdmlib/kgreet_classic.h b/tdmlib/kgreet_classic.h index 1f467a528..3f36d5000 100644 --- a/tdmlib/kgreet_classic.h +++ b/tdmlib/kgreet_classic.h @@ -50,8 +50,11 @@ class KClassicGreeter : public TQObject, public KGreeterPlugin { virtual void presetEntity( const TQString &entity, int field ); virtual TQString getEntity() const; virtual void setUser( const TQString &user ); + virtual void lockUserEntry( const bool lock ); virtual void setPassword( const TQString &pass ); + virtual void setPasswordPrompt( const TQString &prompt ); virtual void setEnabled( bool on ); + virtual void setInfoMessageDisplay( bool on ); virtual bool textMessage( const char *message, bool error ); virtual void textPrompt( const char *prompt, bool echo, bool nonBlocking ); virtual bool binaryPrompt( const char *prompt, bool nonBlocking ); @@ -70,6 +73,7 @@ class KClassicGreeter : public TQObject, public KGreeterPlugin { void slotActivity(); private: + TQString passwordPrompt(); void setActive( bool enable ); void setActive2( bool enable ); void returnData(); @@ -81,8 +85,10 @@ class KClassicGreeter : public TQObject, public KGreeterPlugin { TQString fixedUser, curUser; Function func; Context ctx; + TQGridLayout* grid; int exp, pExp, has; - bool running, authTok; + bool running, authTok, userEntryLocked, suppressInfoMsg; + TQString passwdPromptCustomString; }; #endif /* KGREET_CLASSIC_H */ diff --git a/tdmlib/kgreet_pam.cpp b/tdmlib/kgreet_pam.cpp index b16dfb440..2aea2ae04 100644 --- a/tdmlib/kgreet_pam.cpp +++ b/tdmlib/kgreet_pam.cpp @@ -88,7 +88,9 @@ KPamGreeter::KPamGreeter( KGreeterPluginHandler *_handler, ctx( _ctx ), exp( -1 ), pExp( -1 ), - running( false ) + running( false ), + userEntryLocked(false), + suppressInfoMsg(false) { ctx = Login; @@ -263,6 +265,11 @@ KPamGreeter::setUser( const TQString &user ) } } +void KPamGreeter::lockUserEntry( const bool lock ) { + userEntryLocked = lock; + loginEdit->setEnabled(!lock); +} + void // virtual KPamGreeter::setPassword( const TQString &pass ) { @@ -279,9 +286,31 @@ KPamGreeter::setEnabled(bool enable) // loginLabel->setEnabled( enable ); authEdit[0]->setEnabled( enable ); setActive( enable ); - if (enable) + if (enable) { authEdit[0]->setFocus(); + } + } + +void KPamGreeter::setInfoMessageDisplay(bool enable) { + suppressInfoMsg = !enable; +} + +void KPamGreeter::setPasswordPrompt(const TQString &prompt) { +#if 0 + if (passwdLabel) { + if (prompt != TQString::null) { + passwdLabel->setText(prompt); + } + else { + passwdLabel->setText(passwordPrompt()); + } + if (grid) { + grid->invalidate(); + grid->activate(); + } } +#endif +} void // private KPamGreeter::returnData() @@ -315,17 +344,22 @@ KPamGreeter::returnData() bool // virtual KPamGreeter::textMessage( const char *text, bool err ) { - kg_debug(" ************** textMessage(%s, %d)\n", text, err); + kg_debug(" ************** textMessage(%s, %d)\n", text, err); - if (!authEdit.size()) - return false; + if (!authEdit.size()) { + return false; + } - if (getLayoutItem()) { - TQLabel* label = new TQLabel(TQString::fromUtf8(text), m_parentWidget); - getLayoutItem()->addWidget(label, state+1, 0, 0); - } + if (!err && suppressInfoMsg) { + return true; + } - return true; + if (getLayoutItem()) { + TQLabel* label = new TQLabel(TQString::fromUtf8(text), m_parentWidget); + getLayoutItem()->addWidget(label, state+1, 0, 0); + } + + return true; } void // virtual @@ -335,8 +369,9 @@ KPamGreeter::textPrompt( const char *prompt, bool echo, bool nonBlocking ) kg_debug("state is %d, authEdit.size is %d\n", state, authEdit.size()); if (state == 0 && echo) { - if (loginLabel) + if (loginLabel) { loginLabel->setText(TQString::fromUtf8(prompt)); + } else if (m_themer) { KdmLabel *tdmlabel = static_cast<KdmLabel*>(m_themer->findNode("user-label")); if (tdmlabel) { @@ -598,8 +633,14 @@ KPamGreeter::clear() void KPamGreeter::setActive( bool enable ) { - if (loginEdit) - loginEdit->setEnabled( enable ); + if (loginEdit) { + if (userEntryLocked) { + loginEdit->setEnabled( false ); + } + else { + loginEdit->setEnabled( enable ); + } + } } void diff --git a/tdmlib/kgreet_pam.h b/tdmlib/kgreet_pam.h index 03c404c1e..f579f9522 100644 --- a/tdmlib/kgreet_pam.h +++ b/tdmlib/kgreet_pam.h @@ -50,8 +50,11 @@ class KPamGreeter : public TQObject, public KGreeterPlugin { virtual void presetEntity( const TQString &entity, int field ); virtual TQString getEntity() const; virtual void setUser( const TQString &user ); + virtual void lockUserEntry( const bool lock ); virtual void setPassword( const TQString &pass ); + virtual void setPasswordPrompt( const TQString &prompt ); virtual void setEnabled( bool on ); + virtual void setInfoMessageDisplay( bool on ); virtual bool textMessage( const char *message, bool error ); virtual void textPrompt( const char *prompt, bool echo, bool nonBlocking ); virtual bool binaryPrompt( const char *prompt, bool nonBlocking ); @@ -88,7 +91,7 @@ class KPamGreeter : public TQObject, public KGreeterPlugin { Context ctx; int exp, pExp, has; unsigned state; - bool running, authTok; + bool running, authTok, userEntryLocked, suppressInfoMsg; }; #endif /* KGREET_CLASSIC_H */ diff --git a/tdmlib/kgreet_winbind.cpp b/tdmlib/kgreet_winbind.cpp index aa7e39b18..cddb2866b 100644 --- a/tdmlib/kgreet_winbind.cpp +++ b/tdmlib/kgreet_winbind.cpp @@ -74,7 +74,9 @@ KWinbindGreeter::KWinbindGreeter( KGreeterPluginHandler *_handler, ctx( _ctx ), exp( -1 ), pExp( -1 ), - running( false ) + running( false ), + userEntryLocked(false), + suppressInfoMsg(false) { KdmItem *user_entry = 0, *pw_entry = 0, *domain_entry = 0; TQGridLayout *grid = 0; @@ -297,6 +299,11 @@ KWinbindGreeter::setUser( const TQString &user ) passwdEdit->selectAll(); } +void KWinbindGreeter::lockUserEntry( const bool lock ) { + userEntryLocked = lock; + loginEdit->setEnabled(!lock); +} + void // virtual KWinbindGreeter::setPassword( const TQString &pass ) { @@ -319,6 +326,27 @@ KWinbindGreeter::setEnabled( bool enable ) passwdEdit->setFocus(); } +void KWinbindGreeter::setInfoMessageDisplay(bool enable) { + suppressInfoMsg = !enable; +} + +void KWinbindGreeter::setPasswordPrompt(const TQString &prompt) { +#if 0 + if (passwdLabel) { + if (prompt != TQString::null) { + passwdLabel->setText(prompt); + } + else { + passwdLabel->setText(passwordPrompt()); + } + if (grid) { + grid->invalidate(); + grid->activate(); + } + } +#endif +} + void // private KWinbindGreeter::returnData() { @@ -348,8 +376,12 @@ bool // virtual KWinbindGreeter::textMessage( const char *text, bool err ) { if (!err && - TQString( text ).find( TQRegExp( "^Changing password for [^ ]+$" ) ) >= 0) + TQString( text ).find( TQRegExp( "^Changing password for [^ ]+$" ) ) >= 0) { + return true; + } + if (!err && suppressInfoMsg) { return true; + } return false; } @@ -524,12 +556,20 @@ KWinbindGreeter::clear() void KWinbindGreeter::setActive( bool enable ) { - if (domainCombo) + if (domainCombo) { domainCombo->setEnabled( enable ); - if (loginEdit) - loginEdit->setEnabled( enable ); - if (passwdEdit) + } + if (loginEdit) { + if (userEntryLocked) { + loginEdit->setEnabled( false ); + } + else { + loginEdit->setEnabled( enable ); + } + } + if (passwdEdit) { passwdEdit->setEnabled( enable ); + } } void diff --git a/tdmlib/kgreet_winbind.h b/tdmlib/kgreet_winbind.h index 54f2653fc..85565628e 100644 --- a/tdmlib/kgreet_winbind.h +++ b/tdmlib/kgreet_winbind.h @@ -54,8 +54,11 @@ class KWinbindGreeter : public TQObject, public KGreeterPlugin { virtual void presetEntity( const TQString &entity, int field ); virtual TQString getEntity() const; virtual void setUser( const TQString &user ); + virtual void lockUserEntry( const bool lock ); virtual void setPassword( const TQString &pass ); + virtual void setPasswordPrompt( const TQString &prompt ); virtual void setEnabled( bool on ); + virtual void setInfoMessageDisplay( bool on ); virtual bool textMessage( const char *message, bool error ); virtual void textPrompt( const char *prompt, bool echo, bool nonBlocking ); virtual bool binaryPrompt( const char *prompt, bool nonBlocking ); @@ -95,7 +98,7 @@ class KWinbindGreeter : public TQObject, public KGreeterPlugin { Function func; Context ctx; int exp, pExp, has; - bool running, authTok; + bool running, authTok, userEntryLocked, suppressInfoMsg; }; #endif /* KGREET_WINBIND_H */ diff --git a/tdmlib/kgreeterplugin.h b/tdmlib/kgreeterplugin.h index 925828455..1dcd0233b 100644 --- a/tdmlib/kgreeterplugin.h +++ b/tdmlib/kgreeterplugin.h @@ -152,12 +152,24 @@ public: virtual void setUser( const TQString &user ) = 0; /** + * Lock or unlock editing of the username entry field + * @param lock true to lock, false to unlock + */ + virtual void lockUserEntry( const bool lock ) = 0; + + /** * "Push" a password into the talker. * @param pass the password to set. */ virtual void setPassword( const TQString &pass ) = 0; /** + * Set the talker's password prompt to a custom string + * @param prompt the password prompt to set, or TQString::null for default + */ + virtual void setPasswordPrompt( const TQString &prompt ) = 0; + + /** * En-/disable any widgets contained in the talker. * Will be called only when not running. * @param on the state to set @@ -165,6 +177,13 @@ public: virtual void setEnabled( bool on ) = 0; /** + * En-/disable display of informational messages + * The default is to display all informational messages + * @param on the state to set + */ + virtual void setInfoMessageDisplay( bool on ) = 0; + + /** * Called when a message from the authentication backend arrives. * @param message the message received from the backend * @param error if true, @p message is an error message, otherwise it's @@ -183,7 +202,7 @@ public: /** * Prompt the user for data. Reply by calling handler->gplugReturnText(). - * @param propmt the prompt to display. It may be null, in which case + * @param prompt the prompt to display. It may be null, in which case * "Username"/"Password" should be shown and the replies should be tagged * with the respective Is* flag. * @param echo if true, a normal input widget can be used, otherwise one that diff --git a/tdmlib/tdmtsak.cpp b/tdmlib/tdmtsak.cpp index c893f86ec..768bcda80 100644 --- a/tdmlib/tdmtsak.cpp +++ b/tdmlib/tdmtsak.cpp @@ -1,6 +1,6 @@ /* This file is part of the TDE project - Copyright (C) 2011 Timothy Pearson <kb9vqf@pearsoncomputing.net> + Copyright (C) 2011 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -18,10 +18,12 @@ Boston, MA 02110-1301, USA. */ -#include "tdmtsak.h" - #include <tqstringlist.h> +#include "dmctl.h" + +#include "tdmtsak.h" + #define FIFO_FILE "/tmp/tdesocket-global/tsak" TQString exec(const char * cmd) { @@ -44,15 +46,17 @@ bool is_vt_local() { return false; } else { - TQString cvtName = ""; - TQString output = exec("tdmctl list"); - TQStringList sessionList = TQStringList::split('\t', output, false); - // See if the current session is local - for ( TQStringList::Iterator it = sessionList.begin(); it != sessionList.end(); ++it ) { - TQStringList sessionInfoList = TQStringList::split(',', *it, true); - if ((*(sessionInfoList.at(0))).startsWith(":")) { - if (TQString(currentDisplay).startsWith(*(sessionInfoList.at(0)))) { - return true; + DM dm; + SessList sess; + if (dm.localSessions(sess)) { + TQString user, loc; + for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + DM::sess2Str2(*it, user, loc); + TQStringList sessionInfoList = TQStringList::split(',', loc, true); + if ((*(sessionInfoList.at(0))).startsWith(":")) { + if (TQString(currentDisplay).startsWith(*(sessionInfoList.at(0)))) { + return true; + } } } } @@ -68,44 +72,54 @@ bool is_vt_active() { return true; } else { + DM dm; + SessList sess; TQString cvtName = ""; - TQString output = exec("tdmctl list"); - TQString curConsole = exec("fgconsole"); - bool intFound; - int curConsoleNum = curConsole.toInt(&intFound); - if (intFound == false) { + TQString curConsole; + int curConsoleNum = dm.activeVT(); + if (curConsoleNum < 0) { return true; } - curConsole = TQString("vt%1").arg(curConsoleNum);; - TQStringList sessionList = TQStringList::split('\t', output, false); - for ( TQStringList::Iterator it = sessionList.begin(); it != sessionList.end(); ++it ) { - TQStringList sessionInfoList = TQStringList::split(',', *it, true); - if ((*(sessionInfoList.at(0))).startsWith(":")) { - if ((*(sessionInfoList.at(1))) == TQString(curConsole)) { - cvtName = (*(sessionInfoList.at(0))); + curConsole = TQString("vt%1").arg(curConsoleNum); + if (dm.localSessions(sess)) { + TQString user, loc; + for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + DM::sess2Str2(*it, user, loc); + TQStringList sessionInfoList = TQStringList::split(',', loc, true); + if ((*(sessionInfoList.at(0))).startsWith(":")) { + if ((*(sessionInfoList.at(1))).stripWhiteSpace() == TQString(curConsole)) { + cvtName = (*(sessionInfoList.at(0))); + } } } - } - if (cvtName != "") { - if (TQString(currentDisplay).startsWith(cvtName)) { - return true; + if (cvtName != "") { + if (TQString(currentDisplay).startsWith(cvtName)) { + return true; + } + else { + return false; + } } else { - return false; - } - } - else { - // See if the current session is local - // If it is, then the VT is not currently active and the SAK must be requested later when it is active - for ( TQStringList::Iterator it = sessionList.begin(); it != sessionList.end(); ++it ) { - TQStringList sessionInfoList = TQStringList::split(',', *it, true); - if ((*(sessionInfoList.at(0))).startsWith(":")) { - if (TQString(currentDisplay).startsWith(*(sessionInfoList.at(0)))) { - return false; + // See if the current session is local + // If it is, then the VT is not currently active and the SAK must be requested later when it is active + for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + DM::sess2Str2(*it, user, loc); + if ((*it).self) { + TQStringList sessionInfoList = TQStringList::split(',', loc, true); + if ((*(sessionInfoList.at(1))).startsWith(" vt")) { + // Local and inactive + return false; + } } } + // Hmm, not local + // Do not reject the SAK + return true; } - // Hmm, not local + } + else { + // Failure! // Do not reject the SAK return true; } diff --git a/twin/client.cpp b/twin/client.cpp index 65818899b..ce7461b36 100644 --- a/twin/client.cpp +++ b/twin/client.cpp @@ -509,7 +509,7 @@ bool Client::isModalSystemNotification() const int format, result; unsigned long n, left; result = XGetWindowProperty(tqt_xdisplay(), window(), atoms->net_wm_system_modal_notification, 0L, 1L, False, XA_CARDINAL, &actual, &format, &n, &left, /*(unsigned char **)*/ &data); - if (result == Success && data != None && format == 32 ) + if (result == Success && data && format == 32 ) { return TRUE; } @@ -2975,7 +2975,7 @@ bool Client::getWindowOpacity() //query translucency settings from X, returns tr int format, result; unsigned long n, left; result = XGetWindowProperty(tqt_xdisplay(), window(), atoms->net_wm_window_opacity, 0L, 1L, False, XA_CARDINAL, &actual, &format, &n, &left, /*(unsigned char **)*/ &data); - if (result == Success && data != None && format == 32 ) + if (result == Success && data && format == 32 ) { opacity_ = *reinterpret_cast< long* >( data ); custom_opacity = true; diff --git a/twin/clients/keramik/pics/border-left.png b/twin/clients/keramik/pics/border-left.png Binary files differindex 298a0aa9a..672f22f49 100644 --- a/twin/clients/keramik/pics/border-left.png +++ b/twin/clients/keramik/pics/border-left.png diff --git a/twin/clients/keramik/pics/border-right.png b/twin/clients/keramik/pics/border-right.png Binary files differindex 1ca876b0d..9f75f06ff 100644 --- a/twin/clients/keramik/pics/border-right.png +++ b/twin/clients/keramik/pics/border-right.png diff --git a/twin/clients/keramik/pics/bottom-center.png b/twin/clients/keramik/pics/bottom-center.png Binary files differindex d6d002534..54fd8b35a 100644 --- a/twin/clients/keramik/pics/bottom-center.png +++ b/twin/clients/keramik/pics/bottom-center.png diff --git a/twin/clients/keramik/pics/bottom-left.png b/twin/clients/keramik/pics/bottom-left.png Binary files differindex 16a2ab982..10d039a80 100644 --- a/twin/clients/keramik/pics/bottom-left.png +++ b/twin/clients/keramik/pics/bottom-left.png diff --git a/twin/clients/keramik/pics/bottom-right.png b/twin/clients/keramik/pics/bottom-right.png Binary files differindex 2d4045432..ab1cb0e1b 100644 --- a/twin/clients/keramik/pics/bottom-right.png +++ b/twin/clients/keramik/pics/bottom-right.png diff --git a/twin/clients/keramik/pics/caption-large-center.png b/twin/clients/keramik/pics/caption-large-center.png Binary files differindex 786276b55..e42a20f07 100644 --- a/twin/clients/keramik/pics/caption-large-center.png +++ b/twin/clients/keramik/pics/caption-large-center.png diff --git a/twin/clients/keramik/pics/caption-large-left.png b/twin/clients/keramik/pics/caption-large-left.png Binary files differindex 7d96bdcea..7bc234e50 100644 --- a/twin/clients/keramik/pics/caption-large-left.png +++ b/twin/clients/keramik/pics/caption-large-left.png diff --git a/twin/clients/keramik/pics/caption-large-right.png b/twin/clients/keramik/pics/caption-large-right.png Binary files differindex 3055d13a7..c2fa976ec 100644 --- a/twin/clients/keramik/pics/caption-large-right.png +++ b/twin/clients/keramik/pics/caption-large-right.png diff --git a/twin/clients/keramik/pics/caption-small-center.png b/twin/clients/keramik/pics/caption-small-center.png Binary files differindex 78636dfd1..cd68f9e2e 100644 --- a/twin/clients/keramik/pics/caption-small-center.png +++ b/twin/clients/keramik/pics/caption-small-center.png diff --git a/twin/clients/keramik/pics/caption-small-left.png b/twin/clients/keramik/pics/caption-small-left.png Binary files differindex cb7e69d73..612726a2d 100644 --- a/twin/clients/keramik/pics/caption-small-left.png +++ b/twin/clients/keramik/pics/caption-small-left.png diff --git a/twin/clients/keramik/pics/caption-small-right.png b/twin/clients/keramik/pics/caption-small-right.png Binary files differindex 9fc74640e..a251e3451 100644 --- a/twin/clients/keramik/pics/caption-small-right.png +++ b/twin/clients/keramik/pics/caption-small-right.png diff --git a/twin/clients/keramik/pics/grabbar-center.png b/twin/clients/keramik/pics/grabbar-center.png Binary files differindex b623b5df2..f2a2b4592 100644 --- a/twin/clients/keramik/pics/grabbar-center.png +++ b/twin/clients/keramik/pics/grabbar-center.png diff --git a/twin/clients/keramik/pics/grabbar-left.png b/twin/clients/keramik/pics/grabbar-left.png Binary files differindex 653f5ccfb..126e7ff92 100644 --- a/twin/clients/keramik/pics/grabbar-left.png +++ b/twin/clients/keramik/pics/grabbar-left.png diff --git a/twin/clients/keramik/pics/grabbar-right.png b/twin/clients/keramik/pics/grabbar-right.png Binary files differindex 248d55410..55f2b3bba 100644 --- a/twin/clients/keramik/pics/grabbar-right.png +++ b/twin/clients/keramik/pics/grabbar-right.png diff --git a/twin/clients/keramik/pics/titlebar-center.png b/twin/clients/keramik/pics/titlebar-center.png Binary files differindex bac31dc55..05ae10120 100644 --- a/twin/clients/keramik/pics/titlebar-center.png +++ b/twin/clients/keramik/pics/titlebar-center.png diff --git a/twin/clients/keramik/pics/titlebar-left.png b/twin/clients/keramik/pics/titlebar-left.png Binary files differindex bc8ee5ca3..61a1dca30 100644 --- a/twin/clients/keramik/pics/titlebar-left.png +++ b/twin/clients/keramik/pics/titlebar-left.png diff --git a/twin/clients/keramik/pics/titlebar-right.png b/twin/clients/keramik/pics/titlebar-right.png Binary files differindex d34a465f5..627cf0d2d 100644 --- a/twin/clients/keramik/pics/titlebar-right.png +++ b/twin/clients/keramik/pics/titlebar-right.png diff --git a/twin/clients/keramik/pics/titlebutton-round-huge.png b/twin/clients/keramik/pics/titlebutton-round-huge.png Binary files differindex c5ca19342..750ff4489 100644 --- a/twin/clients/keramik/pics/titlebutton-round-huge.png +++ b/twin/clients/keramik/pics/titlebutton-round-huge.png diff --git a/twin/clients/keramik/pics/titlebutton-round-large.png b/twin/clients/keramik/pics/titlebutton-round-large.png Binary files differindex 9c3267bf9..e5a8df33e 100644 --- a/twin/clients/keramik/pics/titlebutton-round-large.png +++ b/twin/clients/keramik/pics/titlebutton-round-large.png diff --git a/twin/clients/keramik/pics/titlebutton-round.png b/twin/clients/keramik/pics/titlebutton-round.png Binary files differindex dd2369af3..a99a2bf61 100644 --- a/twin/clients/keramik/pics/titlebutton-round.png +++ b/twin/clients/keramik/pics/titlebutton-round.png diff --git a/twin/clients/keramik/pics/titlebutton-square-huge.png b/twin/clients/keramik/pics/titlebutton-square-huge.png Binary files differindex a908a9f27..c1d9d98ce 100644 --- a/twin/clients/keramik/pics/titlebutton-square-huge.png +++ b/twin/clients/keramik/pics/titlebutton-square-huge.png diff --git a/twin/clients/keramik/pics/titlebutton-square-large.png b/twin/clients/keramik/pics/titlebutton-square-large.png Binary files differindex 6e3ada47b..c6b33bc31 100644 --- a/twin/clients/keramik/pics/titlebutton-square-large.png +++ b/twin/clients/keramik/pics/titlebutton-square-large.png diff --git a/twin/clients/keramik/pics/titlebutton-square.png b/twin/clients/keramik/pics/titlebutton-square.png Binary files differindex 871cf751a..a1a9fc4dd 100644 --- a/twin/clients/keramik/pics/titlebutton-square.png +++ b/twin/clients/keramik/pics/titlebutton-square.png diff --git a/twin/cr16-app-twin.png b/twin/cr16-app-twin.png Binary files differindex 531bff2a2..f7c37c40d 100644 --- a/twin/cr16-app-twin.png +++ b/twin/cr16-app-twin.png diff --git a/twin/cr32-app-twin.png b/twin/cr32-app-twin.png Binary files differindex d1e136748..e9a689200 100644 --- a/twin/cr32-app-twin.png +++ b/twin/cr32-app-twin.png diff --git a/twin/cr48-app-twin.png b/twin/cr48-app-twin.png Binary files differindex fa6419f60..e68fd49c6 100644 --- a/twin/cr48-app-twin.png +++ b/twin/cr48-app-twin.png diff --git a/twin/pics/bluesun.png b/twin/pics/bluesun.png Binary files differindex 1e7bdeb2b..dd5cfb45b 100644 --- a/twin/pics/bluesun.png +++ b/twin/pics/bluesun.png diff --git a/twin/pics/close.png b/twin/pics/close.png Binary files differindex d8fd4a3bb..b77e6090e 100644 --- a/twin/pics/close.png +++ b/twin/pics/close.png diff --git a/twin/pics/fog-grey.png b/twin/pics/fog-grey.png Binary files differindex 94f0e66dd..058929939 100644 --- a/twin/pics/fog-grey.png +++ b/twin/pics/fog-grey.png diff --git a/twin/pics/fog.png b/twin/pics/fog.png Binary files differindex 349c49e5e..d3fb77438 100644 --- a/twin/pics/fog.png +++ b/twin/pics/fog.png diff --git a/twin/pics/greenie.dim.png b/twin/pics/greenie.dim.png Binary files differindex c2dc16837..9e63e8ef8 100644 --- a/twin/pics/greenie.dim.png +++ b/twin/pics/greenie.dim.png diff --git a/twin/pics/greenie.light.png b/twin/pics/greenie.light.png Binary files differindex 49d46b326..436fa5f68 100644 --- a/twin/pics/greenie.light.png +++ b/twin/pics/greenie.light.png diff --git a/twin/pics/iconify.png b/twin/pics/iconify.png Binary files differindex d9bd05501..aee42c6a2 100644 --- a/twin/pics/iconify.png +++ b/twin/pics/iconify.png diff --git a/twin/pics/maximize.png b/twin/pics/maximize.png Binary files differindex 07471bf21..8df3ca098 100644 --- a/twin/pics/maximize.png +++ b/twin/pics/maximize.png diff --git a/twin/pics/maximizedown.png b/twin/pics/maximizedown.png Binary files differindex 3ef359d7c..0e21b991e 100644 --- a/twin/pics/maximizedown.png +++ b/twin/pics/maximizedown.png diff --git a/twin/pics/menu.png b/twin/pics/menu.png Binary files differindex 4c8a9fffd..371cff399 100644 --- a/twin/pics/menu.png +++ b/twin/pics/menu.png diff --git a/twin/pics/pindown.png b/twin/pics/pindown.png Binary files differindex 20be0650a..78e074473 100644 --- a/twin/pics/pindown.png +++ b/twin/pics/pindown.png diff --git a/twin/pics/pinup.png b/twin/pics/pinup.png Binary files differindex e2256b276..1b5f8fa09 100644 --- a/twin/pics/pinup.png +++ b/twin/pics/pinup.png diff --git a/twin/pics/unknown.png b/twin/pics/unknown.png Binary files differindex b52168b82..d6e6d822d 100644 --- a/twin/pics/unknown.png +++ b/twin/pics/unknown.png |