summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ConfigureChecks.cmake35
m---------cmake0
-rw-r--r--config.h.cmake14
-rw-r--r--doc/kate/configdialog01.pngbin44641 -> 44732 bytes
-rw-r--r--doc/kate/highlighted.pngbin4797 -> 4458 bytes
-rw-r--r--doc/kate/kate.pngbin81016 -> 81623 bytes
-rw-r--r--doc/kate/unhighlighted.pngbin3471 -> 3381 bytes
-rw-r--r--doc/kcontrol/paths/paths.pngbin52717 -> 42945 bytes
-rw-r--r--doc/kcontrol/screenshot.pngbin97584 -> 87295 bytes
-rw-r--r--doc/kcontrol/useraccount/useraccount.pngbin44907 -> 38078 bytes
-rw-r--r--doc/khelpcenter/background.pngbin128431 -> 110002 bytes
-rw-r--r--doc/khelpcenter/bgtable.pngbin25929 -> 19434 bytes
-rw-r--r--doc/khelpcenter/kdelogo2.pngbin5462 -> 5333 bytes
-rw-r--r--doc/khelpcenter/khelpcenter.pngbin1687 -> 1602 bytes
-rw-r--r--doc/khelpcenter/lines.pngbin259 -> 250 bytes
-rw-r--r--doc/khelpcenter/lines2.pngbin198 -> 186 bytes
-rw-r--r--doc/khelpcenter/pointers.pngbin268 -> 257 bytes
-rw-r--r--doc/khelpcenter/shadow1.pngbin184 -> 188 bytes
-rw-r--r--doc/kicker/bookmarks_icon.pngbin2272 -> 2198 bytes
-rw-r--r--doc/kicker/desktop_icon.pngbin6881 -> 3558 bytes
-rw-r--r--doc/kicker/k_menu_icon.pngbin3321 -> 3294 bytes
-rw-r--r--doc/kicker/printsys_icon.pngbin2588 -> 2575 bytes
-rw-r--r--doc/kicker/quickbrowser_icon.pngbin3482 -> 3344 bytes
-rw-r--r--doc/kicker/recent_docs_icon.pngbin3271 -> 2817 bytes
-rw-r--r--doc/kicker/screenshot_left.pngbin18674 -> 18224 bytes
-rw-r--r--doc/kicker/screenshot_right.pngbin11764 -> 10857 bytes
-rw-r--r--doc/kicker/taskbar_group.pngbin4496 -> 3245 bytes
-rw-r--r--doc/kicker/terminals_icon.pngbin2009 -> 1849 bytes
-rw-r--r--doc/kicker/windowlist_icon.pngbin2801 -> 2401 bytes
-rw-r--r--doc/klipper/screenshot.pngbin967 -> 803 bytes
-rw-r--r--doc/kmenuedit/done.pngbin47674 -> 39804 bytes
-rw-r--r--doc/kmenuedit/itemname.pngbin7163 -> 5295 bytes
-rw-r--r--doc/kmenuedit/kmenueditmain.pngbin40179 -> 33314 bytes
-rw-r--r--doc/kmenuedit/new.pngbin9348 -> 7674 bytes
-rw-r--r--doc/kmenuedit/selecticon.pngbin45475 -> 35832 bytes
-rw-r--r--doc/kmenuedit/selectinternet.pngbin17293 -> 14853 bytes
-rw-r--r--doc/knetattach/screenshot.pngbin25179 -> 19537 bytes
-rw-r--r--doc/knetattach/screenshot1.pngbin41777 -> 33789 bytes
-rw-r--r--doc/knetattach/screenshot2.pngbin30550 -> 23540 bytes
-rw-r--r--doc/knetattach/screenshot3.pngbin66693 -> 53493 bytes
-rw-r--r--doc/knetattach/screenshot4.pngbin43020 -> 35414 bytes
-rw-r--r--doc/konqueror/cmndline.pngbin52222 -> 43003 bytes
-rw-r--r--doc/konqueror/dirtree.pngbin50215 -> 41106 bytes
-rw-r--r--doc/konqueror/dragdrop.pngbin47960 -> 40428 bytes
-rw-r--r--doc/konqueror/konqorg.pngbin86855 -> 70600 bytes
-rw-r--r--doc/konqueror/parts.pngbin34160 -> 29876 bytes
-rw-r--r--doc/konqueror/shortcut1.pngbin30880 -> 25357 bytes
-rw-r--r--doc/konqueror/shortcut2.pngbin14159 -> 11750 bytes
-rw-r--r--doc/konsole/konsole.pngbin8848 -> 6528 bytes
-rw-r--r--doc/konsole/tabbar.pngbin3641 -> 2797 bytes
-rw-r--r--doc/kxkb/layout.pngbin27006 -> 19812 bytes
-rw-r--r--doc/kxkb/switching.pngbin13163 -> 9691 bytes
-rw-r--r--doc/kxkb/xkb.pngbin20695 -> 19382 bytes
-rw-r--r--doc/tdefontview/tdefontview.pngbin46034 -> 37854 bytes
-rw-r--r--doc/tdeprint/cr32-action-wizard.pngbin606 -> 422 bytes
-rw-r--r--doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.pngbin100464 -> 84494 bytes
-rw-r--r--doc/tdeprint/cupsaddprinterwizard1.pngbin70554 -> 68379 bytes
-rw-r--r--doc/tdeprint/cupsaddprinterwizard2_backendselection.pngbin76444 -> 74139 bytes
-rw-r--r--doc/tdeprint/cupsaddprinterwizard3_networkscan.pngbin70820 -> 68481 bytes
-rw-r--r--doc/tdeprint/cupsaddprinterwizard3_networkscan_results.pngbin90883 -> 70722 bytes
-rw-r--r--doc/tdeprint/cupsaddprinterwizard4_networkscan_config.pngbin10607 -> 8714 bytes
-rw-r--r--doc/tdeprint/cupsserverconfig_browse_relay_add_button.pngbin2562 -> 1908 bytes
-rw-r--r--doc/tdeprint/cupsserverconfig_browsingmasks_add_button.pngbin2294 -> 1746 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration10_browsinggeneral.pngbin14678 -> 11937 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration11_browsingconnections.pngbin15433 -> 15301 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration11_browsingmasks.pngbin15493 -> 15367 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.pngbin14109 -> 11628 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration14_browsingrelay.pngbin14903 -> 14760 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.pngbin15822 -> 13120 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.pngbin5870 -> 4742 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.pngbin5470 -> 5404 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration1_welcome.pngbin31316 -> 23990 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration2_general.pngbin15870 -> 13049 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration3_logging.pngbin16490 -> 13785 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration4_directories.pngbin17728 -> 14582 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration5_HTTP.pngbin15010 -> 12528 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration6_encryption.pngbin15083 -> 12690 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration7_miscellanious.pngbin15943 -> 13142 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration8_networkgeneral.pngbin15538 -> 12824 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration9_networkclients.pngbin14998 -> 12347 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.pngbin47480 -> 45035 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.pngbin30334 -> 28135 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.pngbin43890 -> 41607 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.pngbin30503 -> 28399 bytes
-rw-r--r--doc/tdeprint/cupsserverconfiguration_securityoverview.pngbin16804 -> 14098 bytes
-rw-r--r--doc/tdeprint/kcontrol-icon.pngbin1202 -> 994 bytes
-rw-r--r--doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.pngbin10761 -> 8218 bytes
-rw-r--r--doc/tdeprint/kcron_to_be_printed.pngbin10637 -> 7695 bytes
-rw-r--r--doc/tdeprint/kprinter-as-netscape-printcommand.pngbin8210 -> 6509 bytes
-rw-r--r--doc/tdeprint/kprinter-kivio.pngbin11149 -> 8926 bytes
-rw-r--r--doc/tdeprint/kprinter.pngbin12568 -> 12374 bytes
-rw-r--r--doc/tdeprint/kprinter_called_from_run_command.pngbin6068 -> 4828 bytes
-rw-r--r--doc/tdeprint/kprinter_with_kcron_developer_special.pngbin11245 -> 8909 bytes
-rw-r--r--doc/tdeprint/ps-boxes.pngbin441 -> 432 bytes
-rw-r--r--doc/tdeprint/steinbruch_scaled.pngbin116567 -> 86352 bytes
-rw-r--r--doc/tdeprint/tdeprint-jobviewer.pngbin11220 -> 8268 bytes
-rw-r--r--doc/tdm/tsak.pngbin17687 -> 15898 bytes
-rw-r--r--doc/userguide/a-window.pngbin110408 -> 95793 bytes
-rw-r--r--doc/userguide/amarok-icon.pngbin2355 -> 2252 bytes
-rw-r--r--doc/userguide/amarok.pngbin14673 -> 12002 bytes
-rw-r--r--doc/userguide/desktop.pngbin28015 -> 27546 bytes
-rw-r--r--doc/userguide/juk-icon.pngbin2599 -> 2300 bytes
-rw-r--r--doc/userguide/juk.pngbin74846 -> 56087 bytes
-rw-r--r--doc/userguide/kaboodle-icon.pngbin2070 -> 1570 bytes
-rw-r--r--doc/userguide/kaboodle.pngbin21032 -> 17490 bytes
-rw-r--r--doc/userguide/kcalc-systray.pngbin5311 -> 5186 bytes
-rw-r--r--doc/userguide/kcontrol.pngbin84846 -> 71364 bytes
-rw-r--r--doc/userguide/kmag.pngbin24008 -> 19751 bytes
-rw-r--r--doc/userguide/kmousetool.pngbin30666 -> 23789 bytes
-rw-r--r--doc/userguide/kmouth.pngbin17835 -> 14603 bytes
-rw-r--r--doc/userguide/kmouth2.pngbin21497 -> 16599 bytes
-rw-r--r--doc/userguide/kmouth3.pngbin45978 -> 36004 bytes
-rw-r--r--doc/userguide/knode-identity.pngbin49777 -> 39668 bytes
-rw-r--r--doc/userguide/knode-mail-account.pngbin43215 -> 35495 bytes
-rw-r--r--doc/userguide/knode-news-account.pngbin25150 -> 18217 bytes
-rw-r--r--doc/userguide/knode-start.pngbin27701 -> 22146 bytes
-rw-r--r--doc/userguide/konq-sidebar.pngbin30686 -> 25794 bytes
-rw-r--r--doc/userguide/konq-simple.pngbin88652 -> 86456 bytes
-rw-r--r--doc/userguide/kopete.pngbin18060 -> 14509 bytes
-rw-r--r--doc/userguide/kppp-dialer-tab.pngbin13648 -> 11163 bytes
-rw-r--r--doc/userguide/kppp-wizard.pngbin22471 -> 18621 bytes
-rw-r--r--doc/userguide/noatun-icon.pngbin2767 -> 2753 bytes
-rw-r--r--doc/userguide/noatun.pngbin16375 -> 13049 bytes
-rw-r--r--doc/userguide/oggfolder.pngbin88475 -> 71077 bytes
-rw-r--r--doc/userguide/open-file-dialog.pngbin71366 -> 63770 bytes
-rw-r--r--doc/userguide/rip.pngbin20916 -> 16632 bytes
-rw-r--r--doc/userguide/ripsettings.pngbin52908 -> 43437 bytes
-rw-r--r--doc/userguide/services.pngbin77067 -> 64769 bytes
-rw-r--r--doc/userguide/splash-screen.pngbin40631 -> 40086 bytes
-rw-r--r--doc/userguide/tdm.pngbin10761 -> 8485 bytes
-rw-r--r--doc/userguide/titlebar-menu.pngbin25775 -> 22478 bytes
-rw-r--r--doc/visualdict/pict1.pngbin1170 -> 1059 bytes
-rw-r--r--doc/visualdict/pict10.pngbin2673 -> 2030 bytes
-rw-r--r--doc/visualdict/pict11.pngbin994 -> 727 bytes
-rw-r--r--doc/visualdict/pict12.pngbin1525 -> 1455 bytes
-rw-r--r--doc/visualdict/pict13.pngbin3952 -> 3100 bytes
-rw-r--r--doc/visualdict/pict14.pngbin2950 -> 2281 bytes
-rw-r--r--doc/visualdict/pict15.pngbin523 -> 410 bytes
-rw-r--r--doc/visualdict/pict16.pngbin9268 -> 8646 bytes
-rw-r--r--doc/visualdict/pict17.pngbin956 -> 839 bytes
-rw-r--r--doc/visualdict/pict18.pngbin558 -> 360 bytes
-rw-r--r--doc/visualdict/pict19.pngbin19326 -> 15856 bytes
-rw-r--r--doc/visualdict/pict2.pngbin926 -> 848 bytes
-rw-r--r--doc/visualdict/pict20.pngbin1562 -> 1187 bytes
-rw-r--r--doc/visualdict/pict21.pngbin30371 -> 23728 bytes
-rw-r--r--doc/visualdict/pict22.pngbin1241 -> 1024 bytes
-rw-r--r--doc/visualdict/pict23.pngbin19677 -> 14577 bytes
-rw-r--r--doc/visualdict/pict3.pngbin10710 -> 9942 bytes
-rw-r--r--doc/visualdict/pict4.pngbin2493 -> 1930 bytes
-rw-r--r--doc/visualdict/pict5.pngbin4428 -> 3743 bytes
-rw-r--r--doc/visualdict/pict6.pngbin46304 -> 39393 bytes
-rw-r--r--doc/visualdict/pict7.pngbin5969 -> 3680 bytes
-rw-r--r--doc/visualdict/pict8.pngbin2178 -> 1502 bytes
-rw-r--r--doc/visualdict/pict9.pngbin5850 -> 5189 bytes
-rw-r--r--drkonqi/pics/konqi.pngbin41465 -> 40626 bytes
-rw-r--r--kappfinder/hi128-app-kappfinder.pngbin13706 -> 9716 bytes
-rw-r--r--kappfinder/hi16-app-kappfinder.pngbin891 -> 736 bytes
-rw-r--r--kappfinder/hi22-app-kappfinder.pngbin3933 -> 4193 bytes
-rw-r--r--kappfinder/hi32-app-kappfinder.pngbin4523 -> 1626 bytes
-rw-r--r--kappfinder/hi48-app-kappfinder.pngbin5963 -> 2849 bytes
-rw-r--r--kappfinder/hi64-app-kappfinder.pngbin7340 -> 4050 bytes
-rw-r--r--kate/pics/actions/cr16-action-curfiledir.pngbin656 -> 544 bytes
-rw-r--r--kate/pics/actions/cr16-action-highlighting.pngbin845 -> 826 bytes
-rw-r--r--kate/pics/actions/cr16-action-modified.pngbin838 -> 665 bytes
-rw-r--r--kate/pics/actions/cr16-action-modmod.pngbin784 -> 784 bytes
-rw-r--r--kate/pics/actions/cr16-action-modonhd.pngbin748 -> 647 bytes
-rw-r--r--kate/pics/actions/cr16-action-null.pngbin85 -> 83 bytes
-rw-r--r--kate/pics/actions/cr32-action-highlighting.pngbin1618 -> 1588 bytes
-rw-r--r--kate/pics/actions/lo16-action-curfiledir.pngbin214 -> 214 bytes
-rw-r--r--kate/pics/actions/lo16-action-indent.pngbin381 -> 326 bytes
-rw-r--r--kate/pics/actions/lo16-action-modified.pngbin313 -> 313 bytes
-rw-r--r--kate/pics/actions/lo16-action-modmod.pngbin313 -> 312 bytes
-rw-r--r--kate/pics/actions/lo16-action-modonhd.pngbin324 -> 321 bytes
-rw-r--r--kate/pics/actions/lo16-action-null.pngbin85 -> 83 bytes
-rw-r--r--kate/pics/actions/lo16-action-unindent.pngbin381 -> 330 bytes
-rw-r--r--kate/pics/actions/lo22-action-indent.pngbin510 -> 430 bytes
-rw-r--r--kate/pics/actions/lo22-action-unindent.pngbin511 -> 429 bytes
-rw-r--r--kate/pics/hi128-app-kate.pngbin20365 -> 20325 bytes
-rw-r--r--kate/pics/hi128-app-kwrite.pngbin20365 -> 20325 bytes
-rw-r--r--kate/pics/hi16-app-kate.pngbin976 -> 831 bytes
-rw-r--r--kate/pics/hi16-app-kwrite.pngbin976 -> 831 bytes
-rw-r--r--kate/pics/hi22-app-kate.pngbin1661 -> 1510 bytes
-rw-r--r--kate/pics/hi22-app-kwrite.pngbin1661 -> 1510 bytes
-rw-r--r--kate/pics/hi32-app-kate.pngbin2693 -> 2103 bytes
-rw-r--r--kate/pics/hi32-app-kwrite.pngbin2693 -> 2103 bytes
-rw-r--r--kate/pics/hi48-app-kate.pngbin5434 -> 4447 bytes
-rw-r--r--kate/pics/hi48-app-kwrite.pngbin5434 -> 4447 bytes
-rw-r--r--kate/pics/hi64-app-kate.pngbin8202 -> 6641 bytes
-rw-r--r--kate/pics/hi64-app-kwrite.pngbin8202 -> 6641 bytes
-rw-r--r--kate/pics/sessionchooser.pngbin29153 -> 29095 bytes
-rw-r--r--kcheckpass/checkpass_pam.c16
-rw-r--r--kcontrol/background/pics/monitor.pngbin7542 -> 7361 bytes
-rw-r--r--kcontrol/crypto/CMakeLists.txt12
-rw-r--r--kcontrol/crypto/crypto.cpp119
-rw-r--r--kcontrol/displayconfig/displayconfig.h3
-rw-r--r--kcontrol/displayconfig/pics/gamma1.4.pngbin490 -> 470 bytes
-rw-r--r--kcontrol/displayconfig/pics/gamma1.6.pngbin486 -> 473 bytes
-rw-r--r--kcontrol/displayconfig/pics/gamma1.8.pngbin481 -> 469 bytes
-rw-r--r--kcontrol/displayconfig/pics/gamma2.0.pngbin488 -> 473 bytes
-rw-r--r--kcontrol/displayconfig/pics/gamma2.2.pngbin493 -> 474 bytes
-rw-r--r--kcontrol/displayconfig/pics/gamma2.4.pngbin489 -> 470 bytes
-rw-r--r--kcontrol/energy/pics/energybig.pngbin24161 -> 20285 bytes
-rw-r--r--kcontrol/energy/pics/lo-energy.pngbin1977 -> 1534 bytes
-rw-r--r--kcontrol/hwmanager/CMakeLists.txt21
-rw-r--r--kcontrol/hwmanager/cryptpassworddlg.cpp140
-rw-r--r--kcontrol/hwmanager/cryptpassworddlg.h64
-rw-r--r--kcontrol/hwmanager/cryptpassworddlgbase.ui148
-rw-r--r--kcontrol/hwmanager/devicepropsdlg.cpp432
-rw-r--r--kcontrol/hwmanager/devicepropsdlg.h10
-rw-r--r--kcontrol/hwmanager/devicepropsdlgbase.ui218
-rw-r--r--kcontrol/hwmanager/hwdevicetray-autostart.desktop11
-rw-r--r--kcontrol/hwmanager/hwdevicetray.cpp431
-rw-r--r--kcontrol/hwmanager/hwdevicetray.desktop10
-rw-r--r--kcontrol/hwmanager/hwdevicetray.h95
-rw-r--r--kcontrol/hwmanager/hwdevicetray_app.cpp32
-rw-r--r--kcontrol/hwmanager/hwdevicetray_app.h39
-rw-r--r--kcontrol/hwmanager/hwdevicetray_bindings.cpp34
-rw-r--r--kcontrol/hwmanager/hwdevicetray_configdialog.cpp78
-rw-r--r--kcontrol/hwmanager/hwdevicetray_configdialog.h59
-rw-r--r--kcontrol/hwmanager/hwdevicetray_main.cpp51
-rw-r--r--kcontrol/hwmanager/hwmanager.cpp32
-rw-r--r--kcontrol/hwmanager/hwmanager.desktop2
-rw-r--r--kcontrol/hwmanager/hwmanager.h1
-rw-r--r--kcontrol/input/pics/doubleclick_1.pngbin2162 -> 2152 bytes
-rw-r--r--kcontrol/input/pics/doubleclick_2.pngbin2260 -> 2247 bytes
-rw-r--r--kcontrol/input/pics/mouse_lh.pngbin12981 -> 11936 bytes
-rw-r--r--kcontrol/input/pics/mouse_rh.pngbin13053 -> 12030 bytes
-rw-r--r--kcontrol/kcontrol/about/top-right-kcontrol.pngbin17282 -> 17259 bytes
-rw-r--r--kcontrol/kcontrol/cr128-app-kcontrol.pngbin12149 -> 11397 bytes
-rw-r--r--kcontrol/kcontrol/cr16-app-kcontrol.pngbin887 -> 887 bytes
-rw-r--r--kcontrol/kcontrol/cr32-app-kcontrol.pngbin2375 -> 2370 bytes
-rw-r--r--kcontrol/kcontrol/cr48-app-kcontrol.pngbin4134 -> 4102 bytes
-rw-r--r--kcontrol/kcontrol/cr64-app-kcontrol.pngbin5941 -> 5874 bytes
-rw-r--r--kcontrol/knotify/play.pngbin277 -> 138 bytes
-rw-r--r--kcontrol/konq/onlyone.pngbin9530 -> 9665 bytes
-rw-r--r--kcontrol/konq/overlapping.pngbin11446 -> 11215 bytes
-rw-r--r--kcontrol/konq/previews.cpp2
-rw-r--r--kcontrol/krdb/ad/WPerfect.ad3
-rw-r--r--kcontrol/krdb/krdb.cpp4
-rw-r--r--kcontrol/krdb/pics/lo-energy.pngbin2253 -> 1782 bytes
-rw-r--r--kcontrol/krdb/pics/logo.pngbin950 -> 761 bytes
-rw-r--r--kcontrol/krdb/pics/mini-world.pngbin1036 -> 865 bytes
-rw-r--r--kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.pngbin44816 -> 34920 bytes
-rw-r--r--kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.pngbin36781 -> 26872 bytes
-rw-r--r--kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.pngbin46253 -> 35811 bytes
-rw-r--r--kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.pngbin37190 -> 27424 bytes
-rw-r--r--kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.pngbin43523 -> 34427 bytes
-rw-r--r--kcontrol/krdb/themes/Keramik/Keramik.preview.pngbin44218 -> 36813 bytes
-rw-r--r--kcontrol/krdb/themes/Plastik/Plastik.preview.pngbin39809 -> 32067 bytes
-rw-r--r--kcontrol/krdb/themes/Platinum/Platinum.preview.pngbin36512 -> 29861 bytes
-rw-r--r--kcontrol/krdb/themes/Redmond/Redmond.preview.pngbin36199 -> 29529 bytes
-rw-r--r--kcontrol/krdb/themes/Sunshine/Sunshine.preview.pngbin34502 -> 27552 bytes
-rw-r--r--kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.pngbin46390 -> 36135 bytes
-rw-r--r--kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.pngbin36759 -> 28000 bytes
-rw-r--r--kcontrol/locale/pics/background.pngbin28823 -> 28229 bytes
-rw-r--r--kcontrol/pics/cr128-app-access.pngbin7576 -> 7324 bytes
-rw-r--r--kcontrol/pics/cr128-app-arts.pngbin10542 -> 8100 bytes
-rw-r--r--kcontrol/pics/cr128-app-background.pngbin10688 -> 10268 bytes
-rw-r--r--kcontrol/pics/cr128-app-bell.pngbin7039 -> 6793 bytes
-rw-r--r--kcontrol/pics/cr128-app-cache.pngbin9342 -> 8261 bytes
-rw-r--r--kcontrol/pics/cr128-app-clock.pngbin17753 -> 15940 bytes
-rw-r--r--kcontrol/pics/cr128-app-colors.pngbin14715 -> 13937 bytes
-rw-r--r--kcontrol/pics/cr128-app-date.pngbin14176 -> 13094 bytes
-rw-r--r--kcontrol/pics/cr128-app-energy.pngbin13774 -> 13346 bytes
-rw-r--r--kcontrol/pics/cr128-app-energy_star.pngbin11541 -> 9270 bytes
-rw-r--r--kcontrol/pics/cr128-app-filetypes.pngbin10583 -> 9367 bytes
-rw-r--r--kcontrol/pics/cr128-app-fonts.pngbin4531 -> 4288 bytes
-rw-r--r--kcontrol/pics/cr128-app-help_index.pngbin12683 -> 11087 bytes
-rw-r--r--kcontrol/pics/cr128-app-hwinfo.pngbin8659 -> 7485 bytes
-rw-r--r--kcontrol/pics/cr128-app-kcmdevices.pngbin10903 -> 8585 bytes
-rw-r--r--kcontrol/pics/cr128-app-kcmdf.pngbin11838 -> 11493 bytes
-rw-r--r--kcontrol/pics/cr128-app-kcmkwm.pngbin6130 -> 6014 bytes
-rw-r--r--kcontrol/pics/cr128-app-kcmmemory.pngbin14318 -> 12875 bytes
-rw-r--r--kcontrol/pics/cr128-app-kcmpartitions.pngbin16732 -> 16155 bytes
-rw-r--r--kcontrol/pics/cr128-app-kcmpci.pngbin5796 -> 4927 bytes
-rw-r--r--kcontrol/pics/cr128-app-key_bindings.pngbin6037 -> 5339 bytes
-rw-r--r--kcontrol/pics/cr128-app-kthememgr.pngbin10328 -> 8748 bytes
-rw-r--r--kcontrol/pics/cr128-app-locale.pngbin12910 -> 12484 bytes
-rw-r--r--kcontrol/pics/cr128-app-multimedia.pngbin12886 -> 11351 bytes
-rw-r--r--kcontrol/pics/cr128-app-proxy.pngbin12824 -> 9480 bytes
-rw-r--r--kcontrol/pics/cr128-app-samba.pngbin7617 -> 6901 bytes
-rw-r--r--kcontrol/pics/cr128-app-stylesheet.pngbin6513 -> 5339 bytes
-rw-r--r--kcontrol/pics/cr128-app-tdescreensaver.pngbin7140 -> 6869 bytes
-rw-r--r--kcontrol/pics/cr128-app-tdmconfig.pngbin15977 -> 15578 bytes
-rw-r--r--kcontrol/pics/cr128-category-preferences-desktop-personal.pngbin13247 -> 12846 bytes
-rw-r--r--kcontrol/pics/cr128-category-preferences-desktop.pngbin12473 -> 11787 bytes
-rw-r--r--kcontrol/pics/cr128-device-laptop.pngbin13375 -> 12032 bytes
-rw-r--r--kcontrol/pics/cr16-app-access.pngbin1022 -> 797 bytes
-rw-r--r--kcontrol/pics/cr16-app-agent.pngbin828 -> 743 bytes
-rw-r--r--kcontrol/pics/cr16-app-arts.pngbin898 -> 791 bytes
-rw-r--r--kcontrol/pics/cr16-app-background.pngbin746 -> 746 bytes
-rw-r--r--kcontrol/pics/cr16-app-bell.pngbin639 -> 633 bytes
-rw-r--r--kcontrol/pics/cr16-app-cache.pngbin823 -> 788 bytes
-rw-r--r--kcontrol/pics/cr16-app-clock.pngbin875 -> 837 bytes
-rw-r--r--kcontrol/pics/cr16-app-colors.pngbin857 -> 855 bytes
-rw-r--r--kcontrol/pics/cr16-app-cookie.pngbin840 -> 755 bytes
-rw-r--r--kcontrol/pics/cr16-app-date.pngbin871 -> 868 bytes
-rw-r--r--kcontrol/pics/cr16-app-energy.pngbin869 -> 869 bytes
-rw-r--r--kcontrol/pics/cr16-app-energy_star.pngbin708 -> 697 bytes
-rw-r--r--kcontrol/pics/cr16-app-enhanced_browsing.pngbin726 -> 688 bytes
-rw-r--r--kcontrol/pics/cr16-app-filetypes.pngbin954 -> 820 bytes
-rw-r--r--kcontrol/pics/cr16-app-fonts.pngbin718 -> 695 bytes
-rw-r--r--kcontrol/pics/cr16-app-help_index.pngbin975 -> 817 bytes
-rw-r--r--kcontrol/pics/cr16-app-hwinfo.pngbin1092 -> 915 bytes
-rw-r--r--kcontrol/pics/cr16-app-icons.pngbin927 -> 714 bytes
-rw-r--r--kcontrol/pics/cr16-app-iconthemes.pngbin828 -> 626 bytes
-rw-r--r--kcontrol/pics/cr16-app-ieee1394.pngbin668 -> 604 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmdevices.pngbin879 -> 800 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmkicker.pngbin658 -> 656 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmkwm.pngbin630 -> 629 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmmemory.pngbin931 -> 814 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmmidi.pngbin582 -> 539 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmpartitions.pngbin882 -> 881 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmpci.pngbin836 -> 704 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmprocessor.pngbin400 -> 186 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmscsi.pngbin976 -> 863 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmsound.pngbin988 -> 836 bytes
-rw-r--r--kcontrol/pics/cr16-app-kcmx.pngbin790 -> 726 bytes
-rw-r--r--kcontrol/pics/cr16-app-key_bindings.pngbin710 -> 709 bytes
-rw-r--r--kcontrol/pics/cr16-app-keyboard.pngbin661 -> 651 bytes
-rw-r--r--kcontrol/pics/cr16-app-keyboard_layout.pngbin871 -> 867 bytes
-rw-r--r--kcontrol/pics/cr16-app-knotify.pngbin657 -> 574 bytes
-rw-r--r--kcontrol/pics/cr16-app-kthememgr.pngbin939 -> 780 bytes
-rw-r--r--kcontrol/pics/cr16-app-locale.pngbin811 -> 811 bytes
-rw-r--r--kcontrol/pics/cr16-app-multimedia.pngbin830 -> 789 bytes
-rw-r--r--kcontrol/pics/cr16-app-panel_settings.pngbin933 -> 735 bytes
-rw-r--r--kcontrol/pics/cr16-app-proxy.pngbin866 -> 794 bytes
-rw-r--r--kcontrol/pics/cr16-app-samba.pngbin652 -> 657 bytes
-rw-r--r--kcontrol/pics/cr16-app-style.pngbin907 -> 764 bytes
-rw-r--r--kcontrol/pics/cr16-app-stylesheet.pngbin810 -> 681 bytes
-rw-r--r--kcontrol/pics/cr16-app-tdescreensaver.pngbin707 -> 620 bytes
-rw-r--r--kcontrol/pics/cr16-app-tdmconfig.pngbin868 -> 868 bytes
-rw-r--r--kcontrol/pics/cr16-app-usb.pngbin695 -> 695 bytes
-rw-r--r--kcontrol/pics/cr16-category-preferences-desktop-peripherals.pngbin1035 -> 919 bytes
-rw-r--r--kcontrol/pics/cr16-category-preferences-desktop-personal.pngbin753 -> 723 bytes
-rw-r--r--kcontrol/pics/cr16-category-preferences-desktop.pngbin842 -> 842 bytes
-rw-r--r--kcontrol/pics/cr16-category-preferences-system.pngbin903 -> 780 bytes
-rw-r--r--kcontrol/pics/cr16-device-laptop.pngbin883 -> 872 bytes
-rw-r--r--kcontrol/pics/cr22-app-access.pngbin1030 -> 1023 bytes
-rw-r--r--kcontrol/pics/cr22-app-arts.pngbin1244 -> 1040 bytes
-rw-r--r--kcontrol/pics/cr22-app-background.pngbin1085 -> 1071 bytes
-rw-r--r--kcontrol/pics/cr22-app-bell.pngbin824 -> 802 bytes
-rw-r--r--kcontrol/pics/cr22-app-cache.pngbin1192 -> 1092 bytes
-rw-r--r--kcontrol/pics/cr22-app-colors.pngbin1304 -> 1301 bytes
-rw-r--r--kcontrol/pics/cr22-app-cookie.pngbin1157 -> 1156 bytes
-rw-r--r--kcontrol/pics/cr22-app-date.pngbin1385 -> 1381 bytes
-rw-r--r--kcontrol/pics/cr22-app-energy.pngbin1316 -> 1316 bytes
-rw-r--r--kcontrol/pics/cr22-app-enhanced_browsing.pngbin948 -> 890 bytes
-rw-r--r--kcontrol/pics/cr22-app-filetypes.pngbin1163 -> 1151 bytes
-rw-r--r--kcontrol/pics/cr22-app-fonts.pngbin952 -> 918 bytes
-rw-r--r--kcontrol/pics/cr22-app-hwinfo.pngbin1288 -> 1287 bytes
-rw-r--r--kcontrol/pics/cr22-app-ieee1394.pngbin953 -> 860 bytes
-rw-r--r--kcontrol/pics/cr22-app-kcmdevices.pngbin1110 -> 1103 bytes
-rw-r--r--kcontrol/pics/cr22-app-kcmkicker.pngbin1048 -> 1036 bytes
-rw-r--r--kcontrol/pics/cr22-app-kcmkwm.pngbin953 -> 930 bytes
-rw-r--r--kcontrol/pics/cr22-app-kcmx.pngbin1096 -> 1019 bytes
-rw-r--r--kcontrol/pics/cr22-app-key_bindings.pngbin978 -> 924 bytes
-rw-r--r--kcontrol/pics/cr22-app-keyboard.pngbin914 -> 811 bytes
-rw-r--r--kcontrol/pics/cr22-app-locale.pngbin1319 -> 1312 bytes
-rw-r--r--kcontrol/pics/cr22-app-proxy.pngbin1500 -> 1387 bytes
-rw-r--r--kcontrol/pics/cr22-app-samba.pngbin928 -> 908 bytes
-rw-r--r--kcontrol/pics/cr22-app-stylesheet.pngbin1059 -> 1024 bytes
-rw-r--r--kcontrol/pics/cr22-app-tdescreensaver.pngbin1058 -> 910 bytes
-rw-r--r--kcontrol/pics/cr22-app-tdmconfig.pngbin1363 -> 1337 bytes
-rw-r--r--kcontrol/pics/cr22-category-preferences-desktop-personal.pngbin1238 -> 1195 bytes
-rw-r--r--kcontrol/pics/cr22-device-laptop.pngbin1383 -> 1349 bytes
-rw-r--r--kcontrol/pics/cr32-app-access.pngbin1619 -> 1607 bytes
-rw-r--r--kcontrol/pics/cr32-app-agent.pngbin2606 -> 2114 bytes
-rw-r--r--kcontrol/pics/cr32-app-arts.pngbin2164 -> 1830 bytes
-rw-r--r--kcontrol/pics/cr32-app-background.pngbin1714 -> 1683 bytes
-rw-r--r--kcontrol/pics/cr32-app-bell.pngbin1496 -> 1251 bytes
-rw-r--r--kcontrol/pics/cr32-app-cache.pngbin2063 -> 1974 bytes
-rw-r--r--kcontrol/pics/cr32-app-clock.pngbin2458 -> 2376 bytes
-rw-r--r--kcontrol/pics/cr32-app-colors.pngbin2295 -> 2293 bytes
-rw-r--r--kcontrol/pics/cr32-app-cookie.pngbin2524 -> 2073 bytes
-rw-r--r--kcontrol/pics/cr32-app-date.pngbin2478 -> 2463 bytes
-rw-r--r--kcontrol/pics/cr32-app-energy.pngbin2218 -> 2208 bytes
-rw-r--r--kcontrol/pics/cr32-app-energy_star.pngbin1935 -> 1938 bytes
-rw-r--r--kcontrol/pics/cr32-app-filetypes.pngbin2130 -> 1812 bytes
-rw-r--r--kcontrol/pics/cr32-app-fonts.pngbin1336 -> 1316 bytes
-rw-r--r--kcontrol/pics/cr32-app-help_index.pngbin2130 -> 1684 bytes
-rw-r--r--kcontrol/pics/cr32-app-hwinfo.pngbin1838 -> 1623 bytes
-rw-r--r--kcontrol/pics/cr32-app-icons.pngbin2853 -> 2404 bytes
-rw-r--r--kcontrol/pics/cr32-app-iconthemes.pngbin2386 -> 2028 bytes
-rw-r--r--kcontrol/pics/cr32-app-ieee1394.pngbin1414 -> 1251 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmdevices.pngbin1825 -> 1555 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmdrkonqi.pngbin1834 -> 1635 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmkicker.pngbin1706 -> 1651 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmkwm.pngbin1297 -> 1269 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmmemory.pngbin2205 -> 1927 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmmidi.pngbin1160 -> 963 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmpartitions.pngbin2481 -> 2475 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmpci.pngbin1319 -> 1140 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmprocessor.pngbin636 -> 583 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmscsi.pngbin2538 -> 2243 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmsound.pngbin2465 -> 2096 bytes
-rw-r--r--kcontrol/pics/cr32-app-kcmx.pngbin2169 -> 1730 bytes
-rw-r--r--kcontrol/pics/cr32-app-key_bindings.pngbin1605 -> 1554 bytes
-rw-r--r--kcontrol/pics/cr32-app-keyboard.pngbin1372 -> 1190 bytes
-rw-r--r--kcontrol/pics/cr32-app-keyboard_layout.pngbin2413 -> 2410 bytes
-rw-r--r--kcontrol/pics/cr32-app-knotify.pngbin1488 -> 1255 bytes
-rw-r--r--kcontrol/pics/cr32-app-kthememgr.pngbin1966 -> 1652 bytes
-rw-r--r--kcontrol/pics/cr32-app-locale.pngbin2252 -> 2247 bytes
-rw-r--r--kcontrol/pics/cr32-app-multimedia.pngbin1988 -> 1946 bytes
-rw-r--r--kcontrol/pics/cr32-app-proxy.pngbin2225 -> 1978 bytes
-rw-r--r--kcontrol/pics/cr32-app-samba.pngbin1521 -> 1448 bytes
-rw-r--r--kcontrol/pics/cr32-app-style.pngbin1883 -> 1602 bytes
-rw-r--r--kcontrol/pics/cr32-app-stylesheet.pngbin1837 -> 1830 bytes
-rw-r--r--kcontrol/pics/cr32-app-tdescreensaver.pngbin1663 -> 1612 bytes
-rw-r--r--kcontrol/pics/cr32-app-tdmconfig.pngbin2280 -> 2273 bytes
-rw-r--r--kcontrol/pics/cr32-app-usb.pngbin1889 -> 1876 bytes
-rw-r--r--kcontrol/pics/cr32-category-preferences-desktop-peripherals.pngbin2815 -> 2435 bytes
-rw-r--r--kcontrol/pics/cr32-category-preferences-desktop-personal.pngbin1914 -> 1893 bytes
-rw-r--r--kcontrol/pics/cr32-category-preferences-desktop.pngbin2135 -> 2129 bytes
-rw-r--r--kcontrol/pics/cr32-category-preferences-system.pngbin2381 -> 1909 bytes
-rw-r--r--kcontrol/pics/cr32-device-laptop.pngbin2473 -> 2448 bytes
-rw-r--r--kcontrol/pics/cr48-app-access.pngbin2605 -> 2566 bytes
-rw-r--r--kcontrol/pics/cr48-app-agent.pngbin4149 -> 3530 bytes
-rw-r--r--kcontrol/pics/cr48-app-arts.pngbin3746 -> 3002 bytes
-rw-r--r--kcontrol/pics/cr48-app-background.pngbin2906 -> 2856 bytes
-rw-r--r--kcontrol/pics/cr48-app-bell.pngbin2287 -> 2211 bytes
-rw-r--r--kcontrol/pics/cr48-app-cache.pngbin3350 -> 3249 bytes
-rw-r--r--kcontrol/pics/cr48-app-clock.pngbin4736 -> 4563 bytes
-rw-r--r--kcontrol/pics/cr48-app-colors.pngbin4226 -> 4211 bytes
-rw-r--r--kcontrol/pics/cr48-app-cookie.pngbin4296 -> 3493 bytes
-rw-r--r--kcontrol/pics/cr48-app-date.pngbin4593 -> 4568 bytes
-rw-r--r--kcontrol/pics/cr48-app-energy.pngbin3913 -> 3820 bytes
-rw-r--r--kcontrol/pics/cr48-app-energy_star.pngbin3573 -> 3566 bytes
-rw-r--r--kcontrol/pics/cr48-app-filetypes.pngbin3368 -> 2874 bytes
-rw-r--r--kcontrol/pics/cr48-app-fonts.pngbin1833 -> 1769 bytes
-rw-r--r--kcontrol/pics/cr48-app-help_index.pngbin3812 -> 3076 bytes
-rw-r--r--kcontrol/pics/cr48-app-hwinfo.pngbin2955 -> 2552 bytes
-rw-r--r--kcontrol/pics/cr48-app-icons.pngbin4794 -> 4111 bytes
-rw-r--r--kcontrol/pics/cr48-app-iconthemes.pngbin3371 -> 3291 bytes
-rw-r--r--kcontrol/pics/cr48-app-ieee1394.pngbin2158 -> 1909 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmdevices.pngbin3452 -> 2851 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmdf.pngbin3510 -> 3475 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmdrkonqi.pngbin2647 -> 2222 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmkicker.pngbin2971 -> 2828 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmkwm.pngbin2269 -> 2185 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmmemory.pngbin4100 -> 3527 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmmidi.pngbin1639 -> 1339 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmopengl.pngbin1129 -> 911 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmpartitions.pngbin4689 -> 4678 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmpci.pngbin2140 -> 1846 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmprocessor.pngbin966 -> 807 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmscsi.pngbin3977 -> 3414 bytes
-rw-r--r--kcontrol/pics/cr48-app-kcmx.pngbin3747 -> 2943 bytes
-rw-r--r--kcontrol/pics/cr48-app-key_bindings.pngbin2569 -> 2437 bytes
-rw-r--r--kcontrol/pics/cr48-app-keyboard.pngbin2195 -> 1920 bytes
-rw-r--r--kcontrol/pics/cr48-app-keyboard_layout.pngbin4266 -> 4241 bytes
-rw-r--r--kcontrol/pics/cr48-app-kicker.pngbin2971 -> 2828 bytes
-rw-r--r--kcontrol/pics/cr48-app-knotify.pngbin2357 -> 1952 bytes
-rw-r--r--kcontrol/pics/cr48-app-kthememgr.pngbin3115 -> 2582 bytes
-rw-r--r--kcontrol/pics/cr48-app-locale.pngbin4018 -> 4005 bytes
-rw-r--r--kcontrol/pics/cr48-app-multimedia.pngbin3703 -> 3230 bytes
-rw-r--r--kcontrol/pics/cr48-app-proxy.pngbin3921 -> 3546 bytes
-rw-r--r--kcontrol/pics/cr48-app-samba.pngbin2401 -> 2273 bytes
-rw-r--r--kcontrol/pics/cr48-app-style.pngbin3110 -> 2666 bytes
-rw-r--r--kcontrol/pics/cr48-app-stylesheet.pngbin3179 -> 3149 bytes
-rw-r--r--kcontrol/pics/cr48-app-tdescreensaver.pngbin2777 -> 2655 bytes
-rw-r--r--kcontrol/pics/cr48-app-tdmconfig.pngbin4151 -> 4125 bytes
-rw-r--r--kcontrol/pics/cr48-app-usb.pngbin3134 -> 3112 bytes
-rw-r--r--kcontrol/pics/cr48-category-preferences-desktop-peripherals.pngbin3451 -> 2784 bytes
-rw-r--r--kcontrol/pics/cr48-category-preferences-desktop-personal.pngbin3404 -> 3359 bytes
-rw-r--r--kcontrol/pics/cr48-category-preferences-desktop.pngbin3829 -> 3809 bytes
-rw-r--r--kcontrol/pics/cr48-category-preferences-system.pngbin4135 -> 3202 bytes
-rw-r--r--kcontrol/pics/cr48-device-laptop.pngbin4220 -> 3953 bytes
-rw-r--r--kcontrol/pics/cr64-app-access.pngbin3637 -> 3568 bytes
-rw-r--r--kcontrol/pics/cr64-app-arts.pngbin5198 -> 4199 bytes
-rw-r--r--kcontrol/pics/cr64-app-background.pngbin4192 -> 4133 bytes
-rw-r--r--kcontrol/pics/cr64-app-bell.pngbin3238 -> 3128 bytes
-rw-r--r--kcontrol/pics/cr64-app-cache.pngbin4681 -> 4538 bytes
-rw-r--r--kcontrol/pics/cr64-app-clock.pngbin7240 -> 7115 bytes
-rw-r--r--kcontrol/pics/cr64-app-colors.pngbin5874 -> 5758 bytes
-rw-r--r--kcontrol/pics/cr64-app-cookie.pngbin5950 -> 4885 bytes
-rw-r--r--kcontrol/pics/cr64-app-date.pngbin6801 -> 6738 bytes
-rw-r--r--kcontrol/pics/cr64-app-energy.pngbin5681 -> 5536 bytes
-rw-r--r--kcontrol/pics/cr64-app-energy_star.pngbin5336 -> 5304 bytes
-rw-r--r--kcontrol/pics/cr64-app-filetypes.pngbin4782 -> 4145 bytes
-rw-r--r--kcontrol/pics/cr64-app-fonts.pngbin2896 -> 2801 bytes
-rw-r--r--kcontrol/pics/cr64-app-help_index.pngbin5648 -> 4633 bytes
-rw-r--r--kcontrol/pics/cr64-app-hwinfo.pngbin4142 -> 3530 bytes
-rw-r--r--kcontrol/pics/cr64-app-icons.pngbin7051 -> 6355 bytes
-rw-r--r--kcontrol/pics/cr64-app-ieee1394.pngbin2891 -> 2553 bytes
-rw-r--r--kcontrol/pics/cr64-app-kcmdevices.pngbin4255 -> 3835 bytes
-rw-r--r--kcontrol/pics/cr64-app-kcmdf.pngbin5185 -> 5126 bytes
-rw-r--r--kcontrol/pics/cr64-app-kcmkwm.pngbin3005 -> 2840 bytes
-rw-r--r--kcontrol/pics/cr64-app-kcmmemory.pngbin6001 -> 5246 bytes
-rw-r--r--kcontrol/pics/cr64-app-kcmpartitions.pngbin6844 -> 6784 bytes
-rw-r--r--kcontrol/pics/cr64-app-kcmpci.pngbin2743 -> 2356 bytes
-rw-r--r--kcontrol/pics/cr64-app-kcmx.pngbin5495 -> 4233 bytes
-rw-r--r--kcontrol/pics/cr64-app-key_bindings.pngbin3430 -> 3224 bytes
-rw-r--r--kcontrol/pics/cr64-app-knotify.pngbin3285 -> 2694 bytes
-rw-r--r--kcontrol/pics/cr64-app-kthememgr.pngbin4511 -> 3740 bytes
-rw-r--r--kcontrol/pics/cr64-app-locale.pngbin5906 -> 5872 bytes
-rw-r--r--kcontrol/pics/cr64-app-multimedia.pngbin5049 -> 4861 bytes
-rw-r--r--kcontrol/pics/cr64-app-proxy.pngbin5870 -> 4599 bytes
-rw-r--r--kcontrol/pics/cr64-app-samba.pngbin3319 -> 3078 bytes
-rw-r--r--kcontrol/pics/cr64-app-style.pngbin5292 -> 4460 bytes
-rw-r--r--kcontrol/pics/cr64-app-stylesheet.pngbin4585 -> 4506 bytes
-rw-r--r--kcontrol/pics/cr64-app-tdescreensaver.pngbin3703 -> 3560 bytes
-rw-r--r--kcontrol/pics/cr64-app-tdmconfig.pngbin6154 -> 6055 bytes
-rw-r--r--kcontrol/pics/cr64-category-preferences-desktop-personal.pngbin5046 -> 4946 bytes
-rw-r--r--kcontrol/pics/cr64-category-preferences-desktop.pngbin5513 -> 5467 bytes
-rw-r--r--kcontrol/pics/cr64-device-laptop.pngbin5504 -> 5026 bytes
-rw-r--r--kcontrol/randr/tderandrtray.h3
-rw-r--r--kcontrol/tdefontinst/kcmfontinst/cr16-action-newfont.pngbin613 -> 545 bytes
-rw-r--r--kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.pngbin951 -> 820 bytes
-rw-r--r--kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.pngbin1821 -> 1706 bytes
-rw-r--r--kcontrol/tdm/tdm-appear.cpp9
-rw-r--r--kdcop/kdcopwindow.cpp7
-rw-r--r--kdcop/kdcopwindow.h2
-rw-r--r--kdesktop/init/My_Documents6
-rw-r--r--kdesktop/lock/CMakeLists.txt5
-rw-r--r--kdesktop/lock/autologout.cc136
-rw-r--r--kdesktop/lock/autologout.h48
-rw-r--r--kdesktop/lock/infodlg.cc86
-rw-r--r--kdesktop/lock/infodlg.h52
-rw-r--r--kdesktop/lock/lockdlg.cc1455
-rw-r--r--kdesktop/lock/lockdlg.h131
-rw-r--r--kdesktop/lock/lockprocess.cc3168
-rw-r--r--kdesktop/lock/lockprocess.h398
-rw-r--r--kdesktop/lock/main.cc825
-rw-r--r--kdesktop/lock/main.h27
-rw-r--r--kdesktop/lock/querydlg.cc136
-rw-r--r--kdesktop/lock/querydlg.h58
-rw-r--r--kdesktop/lock/sakdlg.cc100
-rw-r--r--kdesktop/lock/sakdlg.h56
-rw-r--r--kdesktop/lock/securedlg.cc216
-rw-r--r--kdesktop/lock/securedlg.h64
-rw-r--r--kdesktop/lockeng.cc127
-rw-r--r--kdesktop/lockeng.h6
-rw-r--r--kdesktop/patterns/fish.pngbin246 -> 81 bytes
-rw-r--r--kdesktop/patterns/flowers.pngbin246 -> 81 bytes
-rw-r--r--kdesktop/patterns/pavement.pngbin241 -> 76 bytes
-rw-r--r--kdesktop/patterns/rattan.pngbin245 -> 80 bytes
-rw-r--r--kdesktop/patterns/stonewall2.pngbin42047 -> 42018 bytes
-rw-r--r--kdesktop/patterns/triangles.pngbin246 -> 81 bytes
-rw-r--r--kdesktop/pics/cr32-app-error.pngbin1591 -> 1201 bytes
-rw-r--r--kdesktop/pics/ksslogo.pngbin5602 -> 5499 bytes
-rw-r--r--kdesktop/pics/splash.pngbin110877 -> 108731 bytes
-rw-r--r--kfind/hi16-app-kfind.pngbin996 -> 846 bytes
-rw-r--r--kfind/hi22-app-kfind.pngbin1417 -> 1380 bytes
-rw-r--r--kfind/hi32-app-kfind.pngbin2247 -> 1807 bytes
-rw-r--r--kfind/hi48-app-kfind.pngbin4298 -> 3650 bytes
-rw-r--r--kfind/hi64-app-kfind.pngbin6131 -> 5338 bytes
-rw-r--r--kfind/pics/lo22-action-archive.pngbin508 -> 357 bytes
-rw-r--r--kfind/pics/lo22-action-delete.pngbin473 -> 232 bytes
-rw-r--r--kfind/pics/lo22-action-idea.pngbin407 -> 191 bytes
-rw-r--r--kfind/pics/lo22-action-info.pngbin420 -> 199 bytes
-rw-r--r--kfind/pics/lo22-action-openfile.pngbin328 -> 143 bytes
-rw-r--r--kfind/pics/lo22-action-save.pngbin360 -> 167 bytes
-rw-r--r--kfind/pics/lo22-action-search.pngbin365 -> 175 bytes
-rw-r--r--khelpcenter/htmlsearch/star.pngbin690 -> 584 bytes
-rw-r--r--khelpcenter/htmlsearch/star_blank.pngbin151 -> 100 bytes
-rw-r--r--khelpcenter/pics/hi128-app-khelpcenter.pngbin13735 -> 12202 bytes
-rw-r--r--khelpcenter/pics/hi16-app-khelpcenter.pngbin1076 -> 914 bytes
-rw-r--r--khelpcenter/pics/hi22-app-khelpcenter.pngbin1533 -> 1439 bytes
-rw-r--r--khelpcenter/pics/hi32-app-khelpcenter.pngbin2012 -> 1643 bytes
-rw-r--r--khelpcenter/pics/hi48-app-khelpcenter.pngbin4107 -> 3439 bytes
-rw-r--r--khelpcenter/pics/hi64-app-khelpcenter.pngbin5653 -> 4862 bytes
-rw-r--r--khotkeys/CMakeLists.txt2
-rw-r--r--khotkeys/Makefile.am5
-rw-r--r--khotkeys/app/CMakeLists.txt5
-rw-r--r--khotkeys/app/Makefile.am3
-rw-r--r--khotkeys/app/khotkeys.desktop206
-rw-r--r--khotkeys/kcontrol/hi16-app-khotkeys.pngbin486 -> 336 bytes
-rw-r--r--khotkeys/kcontrol/hi32-app-khotkeys.pngbin1333 -> 931 bytes
-rw-r--r--khotkeys/khotkeys.desktop2
-rw-r--r--kicker/applets/clock/lcd.pngbin237 -> 228 bytes
-rw-r--r--kicker/applets/naughty/naughty-happy.pngbin457 -> 391 bytes
-rw-r--r--kicker/applets/naughty/naughty-sad.pngbin440 -> 374 bytes
-rw-r--r--kicker/applets/systemtray/systemtrayapplet.cpp33
-rw-r--r--kicker/applets/systemtray/systemtrayapplet.h1
-rw-r--r--kicker/data/app_start_anim/disk1.pngbin357 -> 357 bytes
-rw-r--r--kicker/data/app_start_anim/disk10.pngbin376 -> 376 bytes
-rw-r--r--kicker/data/app_start_anim/disk2.pngbin360 -> 360 bytes
-rw-r--r--kicker/data/app_start_anim/disk3.pngbin364 -> 364 bytes
-rw-r--r--kicker/data/app_start_anim/disk4.pngbin368 -> 368 bytes
-rw-r--r--kicker/data/app_start_anim/disk5.pngbin365 -> 365 bytes
-rw-r--r--kicker/data/app_start_anim/disk6.pngbin368 -> 367 bytes
-rw-r--r--kicker/data/app_start_anim/disk7.pngbin362 -> 362 bytes
-rw-r--r--kicker/data/app_start_anim/disk8.pngbin359 -> 359 bytes
-rw-r--r--kicker/data/app_start_anim/disk9.pngbin382 -> 380 bytes
-rw-r--r--kicker/data/icons/actions/cr16-action-modified.pngbin838 -> 665 bytes
-rw-r--r--kicker/data/icons/actions/lo16-action-modified.pngbin313 -> 313 bytes
-rw-r--r--kicker/data/icons/cr16-app-kdisknav.pngbin835 -> 812 bytes
-rw-r--r--kicker/data/icons/cr16-app-kicker.pngbin658 -> 656 bytes
-rw-r--r--kicker/data/icons/cr16-app-panel.pngbin658 -> 656 bytes
-rw-r--r--kicker/data/icons/cr16-app-window_list.pngbin914 -> 823 bytes
-rw-r--r--kicker/data/icons/cr32-app-kdisknav.pngbin1776 -> 1753 bytes
-rw-r--r--kicker/data/icons/cr32-app-window_list.pngbin2105 -> 1924 bytes
-rw-r--r--kicker/data/icons/cr48-app-kdisknav.pngbin3482 -> 3344 bytes
-rw-r--r--kicker/data/icons/cr48-app-window_list.pngbin2801 -> 2401 bytes
-rw-r--r--kicker/data/kickoff/button-box-gradient-topdown.pngbin213 -> 207 bytes
-rw-r--r--kicker/data/kickoff/button-box-gradient.pngbin255 -> 254 bytes
-rw-r--r--kicker/data/kickoff/button-box-left-corner.pngbin203 -> 201 bytes
-rw-r--r--kicker/data/kickoff/button-box-left.pngbin306 -> 305 bytes
-rw-r--r--kicker/data/kickoff/button-box-right-corner.pngbin214 -> 213 bytes
-rw-r--r--kicker/data/kickoff/button-box-top.pngbin163 -> 162 bytes
-rw-r--r--kicker/data/kickoff/cr128-action-suspend2disk.pngbin13797 -> 13331 bytes
-rw-r--r--kicker/data/kickoff/cr128-action-suspend2ram.pngbin15500 -> 15069 bytes
-rw-r--r--kicker/data/kickoff/cr16-action-suspend2disk.pngbin834 -> 834 bytes
-rw-r--r--kicker/data/kickoff/cr16-action-suspend2ram.pngbin865 -> 844 bytes
-rw-r--r--kicker/data/kickoff/cr32-action-leave.pngbin1602 -> 1592 bytes
-rw-r--r--kicker/data/kickoff/cr32-action-suspend2disk.pngbin2091 -> 2077 bytes
-rw-r--r--kicker/data/kickoff/cr32-action-suspend2ram.pngbin2243 -> 2211 bytes
-rw-r--r--kicker/data/kickoff/cr48-action-leave.pngbin2475 -> 2451 bytes
-rw-r--r--kicker/data/kickoff/cr48-action-suspend2disk.pngbin3713 -> 3666 bytes
-rw-r--r--kicker/data/kickoff/cr48-action-suspend2ram.pngbin3965 -> 3909 bytes
-rw-r--r--kicker/data/kickoff/cr48-app-recently_used.pngbin4736 -> 4563 bytes
-rw-r--r--kicker/data/kickoff/cr64-action-suspend2disk.pngbin5601 -> 5467 bytes
-rw-r--r--kicker/data/kickoff/cr64-action-suspend2ram.pngbin6115 -> 5978 bytes
-rw-r--r--kicker/data/kickoff/kmenu_basic.pngbin4424 -> 4390 bytes
-rw-r--r--kicker/data/kickoff/left_triangle.pngbin781 -> 456 bytes
-rw-r--r--kicker/data/kickoff/main_border_bc.pngbin171 -> 163 bytes
-rw-r--r--kicker/data/kickoff/main_border_lc.pngbin166 -> 158 bytes
-rw-r--r--kicker/data/kickoff/main_border_rc.pngbin174 -> 165 bytes
-rw-r--r--kicker/data/kickoff/main_border_tc.pngbin163 -> 156 bytes
-rw-r--r--kicker/data/kickoff/main_corner_bl.pngbin211 -> 207 bytes
-rw-r--r--kicker/data/kickoff/main_corner_br.pngbin218 -> 212 bytes
-rw-r--r--kicker/data/kickoff/main_corner_tl.pngbin176 -> 168 bytes
-rw-r--r--kicker/data/kickoff/main_corner_tr.pngbin202 -> 195 bytes
-rw-r--r--kicker/data/kickoff/menu_separator.pngbin260 -> 257 bytes
-rw-r--r--kicker/data/kickoff/resize_handle.pngbin217 -> 196 bytes
-rw-r--r--kicker/data/kickoff/right_triangle.pngbin722 -> 435 bytes
-rw-r--r--kicker/data/kickoff/search-gradient-topdown.pngbin181 -> 178 bytes
-rw-r--r--kicker/data/kickoff/search-gradient.pngbin218 -> 211 bytes
-rw-r--r--kicker/data/kickoff/search-tab-center.pngbin170 -> 162 bytes
-rw-r--r--kicker/data/kickoff/search-tab-left.pngbin398 -> 359 bytes
-rw-r--r--kicker/data/kickoff/search-tab-right.pngbin417 -> 390 bytes
-rw-r--r--kicker/data/kickoff/search-tab-top-center.pngbin146 -> 137 bytes
-rw-r--r--kicker/data/kickoff/search-tab-top-left.pngbin2960 -> 299 bytes
-rw-r--r--kicker/data/kickoff/search-tab-top-right.pngbin368 -> 367 bytes
-rw-r--r--kicker/data/kickoff/tab-bottom-left-topdown.pngbin145 -> 138 bytes
-rw-r--r--kicker/data/kickoff/tab-bottom-right-topdown.pngbin171 -> 166 bytes
-rw-r--r--kicker/data/kickoff/tab-bottom-right.pngbin351 -> 351 bytes
-rw-r--r--kicker/data/kickoff/tab-center-topdown.pngbin142 -> 138 bytes
-rw-r--r--kicker/data/kickoff/tab-center.pngbin175 -> 174 bytes
-rw-r--r--kicker/data/kickoff/tab-left_center.pngbin165 -> 156 bytes
-rw-r--r--kicker/data/kickoff/tab-right_center.pngbin165 -> 158 bytes
-rw-r--r--kicker/data/kickoff/tab-top-left-topdown.pngbin256 -> 256 bytes
-rw-r--r--kicker/data/kickoff/tab-top-left.pngbin198 -> 195 bytes
-rw-r--r--kicker/data/kickoff/tab-top-right-topdown.pngbin327 -> 327 bytes
-rw-r--r--kicker/data/kickoff/tab-top-right.pngbin198 -> 197 bytes
-rw-r--r--kicker/data/kmenu_side/kside.pngbin8794 -> 8052 bytes
-rw-r--r--kicker/data/kmenu_side/kside_top_left.pngbin178 -> 176 bytes
-rw-r--r--kicker/data/kmenu_side/kside_top_right.pngbin204 -> 187 bytes
-rw-r--r--kicker/data/kmenu_side/kside_top_tile.pngbin158 -> 156 bytes
-rw-r--r--kicker/data/tiles/KDE_button_large_down.pngbin216 -> 216 bytes
-rw-r--r--kicker/data/tiles/KDE_button_large_up.pngbin212 -> 212 bytes
-rw-r--r--kicker/data/tiles/KDE_button_normal_down.pngbin205 -> 205 bytes
-rw-r--r--kicker/data/tiles/KDE_button_normal_up.pngbin211 -> 211 bytes
-rw-r--r--kicker/data/tiles/KDE_button_tiny_down.pngbin200 -> 198 bytes
-rw-r--r--kicker/data/tiles/KDE_button_tiny_up.pngbin202 -> 199 bytes
-rw-r--r--kicker/data/tiles/blue_wood_large_down.pngbin5113 -> 5111 bytes
-rw-r--r--kicker/data/tiles/blue_wood_large_up.pngbin4968 -> 4936 bytes
-rw-r--r--kicker/data/tiles/blue_wood_normal_down.pngbin3160 -> 3156 bytes
-rw-r--r--kicker/data/tiles/blue_wood_normal_up.pngbin3272 -> 3273 bytes
-rw-r--r--kicker/data/tiles/blue_wood_tiny_down.pngbin1179 -> 1178 bytes
-rw-r--r--kicker/data/tiles/blue_wood_tiny_up.pngbin1196 -> 1179 bytes
-rw-r--r--kicker/data/tiles/green_wood_large_down.pngbin5245 -> 5225 bytes
-rw-r--r--kicker/data/tiles/green_wood_large_up.pngbin4746 -> 4435 bytes
-rw-r--r--kicker/data/tiles/green_wood_normal_down.pngbin3200 -> 3191 bytes
-rw-r--r--kicker/data/tiles/green_wood_normal_up.pngbin3250 -> 3123 bytes
-rw-r--r--kicker/data/tiles/green_wood_tiny_down.pngbin1362 -> 1336 bytes
-rw-r--r--kicker/data/tiles/green_wood_tiny_up.pngbin1180 -> 1115 bytes
-rw-r--r--kicker/data/tiles/light_gray_large_down.pngbin1544 -> 1419 bytes
-rw-r--r--kicker/data/tiles/light_gray_large_up.pngbin2531 -> 2531 bytes
-rw-r--r--kicker/data/tiles/light_gray_normal_up.pngbin1539 -> 1433 bytes
-rw-r--r--kicker/data/tiles/light_gray_tiny_down.pngbin1253 -> 940 bytes
-rw-r--r--kicker/data/tiles/light_gray_tiny_up.pngbin1256 -> 930 bytes
-rw-r--r--kicker/data/tiles/light_green_large_down.pngbin3476 -> 3305 bytes
-rw-r--r--kicker/data/tiles/light_green_large_up.pngbin3443 -> 3317 bytes
-rw-r--r--kicker/data/tiles/light_green_normal_down.pngbin3468 -> 2694 bytes
-rw-r--r--kicker/data/tiles/light_green_normal_up.pngbin3508 -> 2672 bytes
-rw-r--r--kicker/data/tiles/light_green_tiny_down.pngbin1396 -> 1177 bytes
-rw-r--r--kicker/data/tiles/light_green_tiny_up.pngbin1400 -> 1110 bytes
-rw-r--r--kicker/data/tiles/light_pastel_large_down.pngbin3873 -> 2525 bytes
-rw-r--r--kicker/data/tiles/light_pastel_large_up.pngbin3489 -> 3351 bytes
-rw-r--r--kicker/data/tiles/light_pastel_normal_up.pngbin3910 -> 2554 bytes
-rw-r--r--kicker/data/tiles/light_pastel_tiny_down.pngbin1418 -> 1119 bytes
-rw-r--r--kicker/data/tiles/light_pastel_tiny_up.pngbin1419 -> 1146 bytes
-rw-r--r--kicker/data/tiles/light_purple_large_down.pngbin3445 -> 3270 bytes
-rw-r--r--kicker/data/tiles/light_purple_large_up.pngbin3425 -> 3287 bytes
-rw-r--r--kicker/data/tiles/light_purple_normal_down.pngbin3592 -> 2642 bytes
-rw-r--r--kicker/data/tiles/light_purple_normal_up.pngbin3685 -> 2614 bytes
-rw-r--r--kicker/data/tiles/light_purple_tiny_down.pngbin1334 -> 1185 bytes
-rw-r--r--kicker/data/tiles/light_purple_tiny_up.pngbin1335 -> 1182 bytes
-rw-r--r--kicker/data/tiles/nuts_and_bolts_large_down.pngbin2199 -> 1855 bytes
-rw-r--r--kicker/data/tiles/nuts_and_bolts_large_up.pngbin1968 -> 1692 bytes
-rw-r--r--kicker/data/tiles/nuts_and_bolts_normal_down.pngbin1526 -> 1427 bytes
-rw-r--r--kicker/data/tiles/nuts_and_bolts_normal_up.pngbin1523 -> 1428 bytes
-rw-r--r--kicker/data/tiles/nuts_and_bolts_tiny_down.pngbin1332 -> 1130 bytes
-rw-r--r--kicker/data/tiles/nuts_and_bolts_tiny_up.pngbin1165 -> 1052 bytes
-rw-r--r--kicker/data/tiles/red_wood_large_down.pngbin5183 -> 5118 bytes
-rw-r--r--kicker/data/tiles/red_wood_large_up.pngbin4976 -> 4867 bytes
-rw-r--r--kicker/data/tiles/red_wood_normal_down.pngbin3218 -> 3216 bytes
-rw-r--r--kicker/data/tiles/red_wood_normal_up.pngbin3280 -> 3282 bytes
-rw-r--r--kicker/data/tiles/red_wood_tiny_down.pngbin1369 -> 1350 bytes
-rw-r--r--kicker/data/tiles/red_wood_tiny_up.pngbin1175 -> 1171 bytes
-rw-r--r--kicker/data/tiles/solid_blue_large_down.pngbin5182 -> 3614 bytes
-rw-r--r--kicker/data/tiles/solid_blue_large_up.pngbin5259 -> 3594 bytes
-rw-r--r--kicker/data/tiles/solid_blue_normal_down.pngbin3300 -> 3156 bytes
-rw-r--r--kicker/data/tiles/solid_blue_normal_up.pngbin3291 -> 3175 bytes
-rw-r--r--kicker/data/tiles/solid_blue_tiny_down.pngbin1214 -> 1158 bytes
-rw-r--r--kicker/data/tiles/solid_blue_tiny_up.pngbin1208 -> 1152 bytes
-rw-r--r--kicker/data/tiles/solid_gray_large_down.pngbin3736 -> 3503 bytes
-rw-r--r--kicker/data/tiles/solid_gray_large_up.pngbin3744 -> 3510 bytes
-rw-r--r--kicker/data/tiles/solid_gray_normal_down.pngbin2266 -> 2184 bytes
-rw-r--r--kicker/data/tiles/solid_gray_normal_up.pngbin2259 -> 2169 bytes
-rw-r--r--kicker/data/tiles/solid_gray_tiny_down.pngbin983 -> 869 bytes
-rw-r--r--kicker/data/tiles/solid_gray_tiny_up.pngbin976 -> 869 bytes
-rw-r--r--kicker/data/tiles/solid_green_large_down.pngbin5544 -> 3676 bytes
-rw-r--r--kicker/data/tiles/solid_green_large_up.pngbin5588 -> 3629 bytes
-rw-r--r--kicker/data/tiles/solid_green_normal_down.pngbin506 -> 406 bytes
-rw-r--r--kicker/data/tiles/solid_green_normal_up.pngbin554 -> 444 bytes
-rw-r--r--kicker/data/tiles/solid_green_tiny_down.pngbin1210 -> 1153 bytes
-rw-r--r--kicker/data/tiles/solid_green_tiny_up.pngbin1219 -> 1185 bytes
-rw-r--r--kicker/data/tiles/solid_orange_large_down.pngbin5489 -> 3900 bytes
-rw-r--r--kicker/data/tiles/solid_orange_large_up.pngbin5508 -> 3896 bytes
-rw-r--r--kicker/data/tiles/solid_orange_normal_down.pngbin3335 -> 3335 bytes
-rw-r--r--kicker/data/tiles/solid_orange_normal_up.pngbin3356 -> 3356 bytes
-rw-r--r--kicker/data/tiles/solid_orange_tiny_down.pngbin1215 -> 1203 bytes
-rw-r--r--kicker/data/tiles/solid_orange_tiny_up.pngbin1216 -> 1206 bytes
-rw-r--r--kicker/data/tiles/solid_pastel_large_down.pngbin3536 -> 3316 bytes
-rw-r--r--kicker/data/tiles/solid_pastel_large_up.pngbin3557 -> 3409 bytes
-rw-r--r--kicker/data/tiles/solid_pastel_normal_down.pngbin4208 -> 2655 bytes
-rw-r--r--kicker/data/tiles/solid_pastel_normal_up.pngbin4305 -> 2674 bytes
-rw-r--r--kicker/data/tiles/solid_pastel_tiny_down.pngbin1497 -> 1183 bytes
-rw-r--r--kicker/data/tiles/solid_pastel_tiny_up.pngbin1502 -> 1176 bytes
-rw-r--r--kicker/data/tiles/solid_purple_large_down.pngbin3466 -> 3300 bytes
-rw-r--r--kicker/data/tiles/solid_purple_large_up.pngbin3443 -> 3321 bytes
-rw-r--r--kicker/data/tiles/solid_purple_normal_down.pngbin3727 -> 2648 bytes
-rw-r--r--kicker/data/tiles/solid_purple_normal_up.pngbin3808 -> 2625 bytes
-rw-r--r--kicker/data/tiles/solid_purple_tiny_down.pngbin1370 -> 1203 bytes
-rw-r--r--kicker/data/tiles/solid_purple_tiny_up.pngbin1376 -> 1207 bytes
-rw-r--r--kicker/data/tiles/solid_red_large_down.pngbin5543 -> 3757 bytes
-rw-r--r--kicker/data/tiles/solid_red_large_up.pngbin5558 -> 3758 bytes
-rw-r--r--kicker/data/tiles/solid_red_normal_down.pngbin3300 -> 3296 bytes
-rw-r--r--kicker/data/tiles/solid_red_normal_up.pngbin3322 -> 3321 bytes
-rw-r--r--kicker/data/tiles/solid_red_tiny_down.pngbin1195 -> 1184 bytes
-rw-r--r--kicker/data/tiles/solid_red_tiny_up.pngbin1201 -> 1199 bytes
-rw-r--r--kicker/data/tiles/solid_tigereye_large_down.pngbin1852 -> 1782 bytes
-rw-r--r--kicker/data/tiles/solid_tigereye_large_up.pngbin2606 -> 2454 bytes
-rw-r--r--kicker/data/tiles/solid_tigereye_normal_down.pngbin2096 -> 1444 bytes
-rw-r--r--kicker/data/tiles/solid_tigereye_normal_up.pngbin3089 -> 2052 bytes
-rw-r--r--kicker/data/tiles/solid_tigereye_tiny_down.pngbin1261 -> 1257 bytes
-rw-r--r--kicker/data/tiles/solid_tigereye_tiny_up.pngbin1311 -> 1309 bytes
-rw-r--r--kicker/data/wallpaper/deck_plate.pngbin837 -> 744 bytes
-rw-r--r--kicker/data/wallpaper/default.pngbin200 -> 192 bytes
-rw-r--r--kicker/data/wallpaper/green_line.pngbin310 -> 280 bytes
-rw-r--r--kicker/data/wallpaper/rail.pngbin306 -> 275 bytes
-rw-r--r--kicker/kicker/ui/k_new_mnu.cpp122
-rw-r--r--klipper/hi128-app-klipper.pngbin6589 -> 5758 bytes
-rw-r--r--klipper/hi16-app-klipper.pngbin967 -> 803 bytes
-rw-r--r--klipper/hi22-app-klipper.pngbin1051 -> 1045 bytes
-rw-r--r--klipper/hi32-app-klipper.pngbin1673 -> 1452 bytes
-rw-r--r--klipper/hi48-app-klipper.pngbin2575 -> 2247 bytes
-rw-r--r--klipper/hi64-app-klipper.pngbin3224 -> 2823 bytes
-rw-r--r--klipper/klipperpopup.cpp1
-rw-r--r--kmenuedit/hi16-app-kmenuedit.pngbin679 -> 609 bytes
-rw-r--r--kmenuedit/hi22-app-kmenuedit.pngbin1485 -> 1484 bytes
-rw-r--r--kmenuedit/hi32-app-kmenuedit.pngbin2481 -> 2081 bytes
-rw-r--r--kmenuedit/hi48-app-kmenuedit.pngbin1963 -> 1608 bytes
-rw-r--r--kmenuedit/pixmaps/cr22-action-filesave_and_close.pngbin3263 -> 818 bytes
-rw-r--r--kmenuedit/pixmaps/cr22-action-menu_new.pngbin1247 -> 1247 bytes
-rw-r--r--kmenuedit/pixmaps/cr22-action-menu_new_sep.pngbin162 -> 150 bytes
-rw-r--r--kmenuedit/pixmaps/cr32-action-menu_new.pngbin2481 -> 2081 bytes
-rw-r--r--kmenuedit/pixmaps/cr32-action-menu_new_sep.pngbin596 -> 535 bytes
-rw-r--r--kmenuedit/pixmaps/lo16-action-menu_new.pngbin679 -> 609 bytes
-rw-r--r--knetattach/hi128-app-knetattach.pngbin14284 -> 14208 bytes
-rw-r--r--knetattach/hi16-app-knetattach.pngbin894 -> 867 bytes
-rw-r--r--knetattach/hi22-app-knetattach.pngbin1396 -> 1390 bytes
-rw-r--r--knetattach/hi32-app-knetattach.pngbin2350 -> 2325 bytes
-rw-r--r--knetattach/hi48-app-knetattach.pngbin4204 -> 4155 bytes
-rw-r--r--knetattach/hi64-app-knetattach.pngbin6115 -> 6019 bytes
-rw-r--r--[-rwxr-xr-x]konqueror/about/box-centre-konqueror.pngbin1089 -> 1093 bytes
-rw-r--r--konqueror/about/lightning.pngbin203 -> 204 bytes
-rw-r--r--konqueror/about/top-right-konqueror.pngbin19771 -> 19704 bytes
-rw-r--r--konqueror/iconview/konq_iconview.cc26
-rw-r--r--konqueror/keditbookmarks/cr16-app-keditbookmarks.pngbin916 -> 768 bytes
-rw-r--r--konqueror/keditbookmarks/cr32-app-keditbookmarks.pngbin1636 -> 1275 bytes
-rw-r--r--konqueror/keditbookmarks/cr48-app-keditbookmarks.pngbin2663 -> 2174 bytes
-rw-r--r--konqueror/keditbookmarks/cr64-app-keditbookmarks.pngbin5042 -> 4106 bytes
-rw-r--r--konqueror/listview/konq_listview.cc28
-rw-r--r--konqueror/listview/konq_listviewwidget.cc6
-rw-r--r--konqueror/pics/actions/cr16-action-trinity1.pngbin880 -> 744 bytes
-rw-r--r--konqueror/pics/actions/cr16-action-trinity2.pngbin867 -> 740 bytes
-rw-r--r--konqueror/pics/actions/cr16-action-trinity3.pngbin880 -> 744 bytes
-rw-r--r--konqueror/pics/actions/cr16-action-trinity4.pngbin867 -> 740 bytes
-rw-r--r--konqueror/pics/actions/cr16-action-trinity5.pngbin880 -> 744 bytes
-rw-r--r--konqueror/pics/actions/cr16-action-trinity6.pngbin867 -> 740 bytes
-rw-r--r--konqueror/pics/hi128-app-konqueror.pngbin19548 -> 16067 bytes
-rw-r--r--konqueror/pics/hi16-app-kfm.pngbin995 -> 861 bytes
-rw-r--r--konqueror/pics/hi16-app-konqueror.pngbin959 -> 816 bytes
-rw-r--r--konqueror/pics/hi22-app-konqueror.pngbin1663 -> 1397 bytes
-rw-r--r--konqueror/pics/hi32-app-kfm.pngbin2691 -> 2250 bytes
-rw-r--r--konqueror/pics/hi32-app-konqueror.pngbin2680 -> 2199 bytes
-rw-r--r--konqueror/pics/hi48-app-kfm.pngbin4693 -> 3934 bytes
-rw-r--r--konqueror/pics/hi48-app-konqueror.pngbin5009 -> 4121 bytes
-rw-r--r--konqueror/pics/hi64-app-kfm.pngbin6521 -> 5557 bytes
-rw-r--r--konqueror/pics/hi64-app-konqueror.pngbin7776 -> 6505 bytes
-rw-r--r--konqueror/pics/indicators/indicator_connect.pngbin496 -> 419 bytes
-rw-r--r--konqueror/pics/indicators/indicator_empty.pngbin591 -> 601 bytes
-rw-r--r--konqueror/pics/indicators/indicator_noconnect.pngbin233 -> 174 bytes
-rw-r--r--konqueror/pics/indicators/indicator_viewactive.pngbin654 -> 648 bytes
-rw-r--r--konqueror/pics/tiles/bluemorning.pngbin14442 -> 11837 bytes
-rw-r--r--konqueror/pics/tiles/canvas.pngbin35031 -> 22408 bytes
-rw-r--r--konqueror/pics/tiles/kde4ever.pngbin15428 -> 14287 bytes
-rw-r--r--konqueror/pics/tiles/kenwimer.pngbin422 -> 343 bytes
-rw-r--r--konqueror/pics/tiles/noise.pngbin44973 -> 38507 bytes
-rw-r--r--konqueror/pics/tiles/paper_flieder.pngbin60601 -> 38120 bytes
-rw-r--r--konqueror/pics/tiles/redfiber.pngbin72488 -> 62034 bytes
-rw-r--r--konsole/konsole/TEWidget.cpp19
-rw-r--r--konsole/konsole/TEWidget.h7
-rw-r--r--konsole/konsole/TEmulation.cpp1
-rw-r--r--konsole/other/hi128-app-konsole.pngbin7666 -> 6626 bytes
-rw-r--r--konsole/other/hi16-app-konsole.pngbin826 -> 755 bytes
-rw-r--r--konsole/other/hi22-app-konsole.pngbin1186 -> 1057 bytes
-rw-r--r--konsole/other/hi32-app-konsole.pngbin1734 -> 1545 bytes
-rw-r--r--konsole/other/hi48-app-konsole.pngbin2761 -> 2500 bytes
-rw-r--r--konsole/other/hi64-app-konsole.pngbin3800 -> 3410 bytes
-rw-r--r--konsole/other/icons/cr16-action-activity.pngbin829 -> 718 bytes
-rw-r--r--konsole/other/icons/cr16-action-konsoleblue.pngbin728 -> 715 bytes
-rw-r--r--konsole/other/icons/cr16-action-konsolered.pngbin727 -> 712 bytes
-rw-r--r--konsole/other/icons/cr16-action-opentermblue.pngbin645 -> 644 bytes
-rw-r--r--konsole/other/icons/cr16-action-opentermred.pngbin639 -> 638 bytes
-rw-r--r--konsole/other/icons/cr16-action-silence.pngbin722 -> 636 bytes
-rw-r--r--konsole/other/icons/cr22-action-konsoleblue.pngbin1142 -> 1114 bytes
-rw-r--r--konsole/other/icons/cr22-action-konsolered.pngbin1145 -> 1112 bytes
-rw-r--r--konsole/other/icons/cr22-action-opentermblue.pngbin942 -> 942 bytes
-rw-r--r--konsole/other/icons/cr22-action-opentermred.pngbin939 -> 938 bytes
-rw-r--r--konsole/other/icons/cr32-action-konsoleblue.pngbin1663 -> 1568 bytes
-rw-r--r--konsole/other/icons/cr32-action-konsolered.pngbin1667 -> 1567 bytes
-rw-r--r--konsole/other/icons/cr32-action-opentermblue.pngbin1205 -> 1190 bytes
-rw-r--r--konsole/other/icons/cr32-action-opentermred.pngbin1254 -> 1238 bytes
-rw-r--r--konsole/other/wallpapers/Metric-Monospace-14.pngbin160 -> 163 bytes
-rw-r--r--kpager/hi16-app-kpager.pngbin288 -> 288 bytes
-rw-r--r--kpager/hi22-app-kpager.pngbin1059 -> 900 bytes
-rw-r--r--kpager/hi32-app-kpager.pngbin784 -> 534 bytes
-rw-r--r--kpager/hi48-app-kpager.pngbin1081 -> 764 bytes
-rw-r--r--kpersonalizer/cr16-app-kpersonalizer.pngbin903 -> 804 bytes
-rw-r--r--kpersonalizer/cr32-app-kpersonalizer.pngbin2208 -> 1928 bytes
-rw-r--r--kpersonalizer/pics/step1.pngbin55387 -> 55312 bytes
-rw-r--r--kpersonalizer/pics/step2.pngbin65556 -> 65197 bytes
-rw-r--r--kpersonalizer/pics/step3.pngbin73501 -> 73388 bytes
-rw-r--r--kpersonalizer/pics/step4.pngbin55468 -> 56070 bytes
-rw-r--r--kpersonalizer/pics/step5.pngbin73020 -> 72763 bytes
-rw-r--r--ksmserver/server.cpp6
-rw-r--r--ksmserver/server.h4
-rw-r--r--ksmserver/shutdown.cpp23
-rw-r--r--ksmserver/shutdown.pngbin16266 -> 15720 bytes
-rw-r--r--ksmserver/shutdowndlg.cpp170
-rw-r--r--ksmserver/shutdowndlg.h13
-rw-r--r--ksmserver/shutdownkonq.pngbin62692 -> 62689 bytes
-rw-r--r--ksmserver/startup.cpp1
-rw-r--r--ksplashml/kcmksplash/pics/hi128-app-ksplash.pngbin15013 -> 14467 bytes
-rw-r--r--ksplashml/kcmksplash/pics/hi16-app-ksplash.pngbin1027 -> 947 bytes
-rw-r--r--ksplashml/kcmksplash/pics/hi22-app-ksplash.pngbin1475 -> 1360 bytes
-rw-r--r--ksplashml/kcmksplash/pics/hi32-app-ksplash.pngbin2423 -> 2233 bytes
-rw-r--r--ksplashml/kcmksplash/pics/hi48-app-ksplash.pngbin4168 -> 3923 bytes
-rw-r--r--ksplashml/kcmksplash/pics/hi64-app-ksplash.pngbin6103 -> 5943 bytes
-rw-r--r--ksplashml/pics/splash.pngbin35919 -> 35010 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/Preview.pngbin27938 -> 27511 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/locolor/Preview.pngbin27938 -> 27511 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/locolor/splash_active_bar.pngbin22938 -> 22868 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.pngbin264 -> 251 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/locolor/splash_inactive_bar.pngbin21744 -> 21674 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/locolor/splash_top.pngbin7985 -> 7986 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/splash_active_bar.pngbin22938 -> 22868 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/splash_bottom.pngbin282 -> 269 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.pngbin21744 -> 21674 bytes
-rw-r--r--ksplashml/pics/themes/TDE-Classic/splash_top.pngbin16010 -> 12289 bytes
-rw-r--r--ksplashml/pics/themes/blue-bend/Preview.pngbin71580 -> 68463 bytes
-rw-r--r--ksplashml/pics/themes/blue-bend/splash_active_bar.pngbin21255 -> 20719 bytes
-rw-r--r--ksplashml/pics/themes/blue-bend/splash_bottom.pngbin204 -> 187 bytes
-rw-r--r--ksplashml/pics/themes/blue-bend/splash_inactive_bar.pngbin11997 -> 11219 bytes
-rw-r--r--ksplashml/pics/themes/blue-bend/splash_top.pngbin74445 -> 74467 bytes
-rw-r--r--ksplashml/pics/themes/default/Preview.pngbin62998 -> 60494 bytes
-rw-r--r--ksplashml/pics/themes/default/splash_active_bar.pngbin26541 -> 25969 bytes
-rw-r--r--ksplashml/pics/themes/default/splash_inactive_bar.pngbin16337 -> 16325 bytes
-rw-r--r--ksplashml/pics/themes/default/splash_top.pngbin66090 -> 66143 bytes
-rw-r--r--ksplashml/pics/themes/simple/Preview.pngbin53363 -> 53563 bytes
-rw-r--r--ksplashml/themeengine/redmond/pics/Background.pngbin32680 -> 23138 bytes
-rw-r--r--ksplashml/themeengine/redmond/pics/Preview.pngbin10541 -> 7871 bytes
-rw-r--r--ksplashml/themeengine/standard/Preview.pngbin253130 -> 248581 bytes
-rw-r--r--ksplashml/themeengine/standard/pics/Preview.pngbin51203 -> 49291 bytes
-rw-r--r--ksysguard/cr128-app-ksysguard.pngbin15389 -> 14991 bytes
-rw-r--r--ksysguard/cr16-app-ksysguard.pngbin913 -> 912 bytes
-rw-r--r--ksysguard/cr32-app-ksysguard.pngbin2575 -> 2573 bytes
-rw-r--r--ksysguard/cr48-app-ksysguard.pngbin4804 -> 4797 bytes
-rw-r--r--ksysguard/cr64-app-ksysguard.pngbin6598 -> 6537 bytes
-rw-r--r--ksysguard/pics/X.pngbin965 -> 848 bytes
-rw-r--r--ksysguard/pics/computer.pngbin913 -> 809 bytes
-rw-r--r--ksysguard/pics/daemon.pngbin226 -> 226 bytes
-rw-r--r--ksysguard/pics/kernel.pngbin329 -> 167 bytes
-rw-r--r--ksysguard/pics/ksysguardd.pngbin1080 -> 905 bytes
-rw-r--r--ksysguard/pics/running.pngbin661 -> 537 bytes
-rw-r--r--ksysguard/pics/shell.pngbin1070 -> 892 bytes
-rw-r--r--ksysguard/pics/tdeapp.pngbin874 -> 804 bytes
-rw-r--r--ksysguard/pics/tools.pngbin1055 -> 900 bytes
-rw-r--r--ksysguard/pics/unknownapp.pngbin1059 -> 967 bytes
-rw-r--r--ksysguard/pics/waiting.pngbin963 -> 751 bytes
-rw-r--r--ktip/hi128-app-ktip.pngbin6059 -> 5410 bytes
-rw-r--r--ktip/hi16-app-ktip.pngbin669 -> 521 bytes
-rw-r--r--ktip/hi22-app-ktip.pngbin1133 -> 1084 bytes
-rw-r--r--ktip/hi32-app-ktip.pngbin1665 -> 1343 bytes
-rw-r--r--ktip/hi48-app-ktip.pngbin2595 -> 2115 bytes
-rw-r--r--ktip/hi64-app-ktip.pngbin3606 -> 3141 bytes
-rw-r--r--ktip/pics/wizard_small.pngbin24750 -> 23741 bytes
-rw-r--r--kxkb/kcmmisc.cpp21
-rw-r--r--kxkb/pics/hi16-app-kxkb.pngbin343 -> 245 bytes
-rw-r--r--kxkb/pics/hi32-app-kxkb.pngbin1279 -> 905 bytes
-rw-r--r--kxkb/pics/hi48-app-kxkb.pngbin1821 -> 1384 bytes
-rw-r--r--l10n/C/flag.pngbin307 -> 128 bytes
-rw-r--r--l10n/ad/flag.pngbin613 -> 450 bytes
-rw-r--r--l10n/ae/flag.pngbin184 -> 181 bytes
-rw-r--r--l10n/af/flag.pngbin498 -> 340 bytes
-rw-r--r--l10n/ag/flag.pngbin889 -> 728 bytes
-rw-r--r--l10n/ai/flag.pngbin932 -> 699 bytes
-rw-r--r--l10n/al/flag.pngbin627 -> 477 bytes
-rw-r--r--l10n/am/flag.pngbin284 -> 151 bytes
-rw-r--r--l10n/an/flag.pngbin482 -> 320 bytes
-rw-r--r--l10n/ao/flag.pngbin516 -> 369 bytes
-rw-r--r--l10n/ar/flag.pngbin527 -> 379 bytes
-rw-r--r--l10n/as/flag.pngbin822 -> 606 bytes
-rw-r--r--l10n/at/flag.pngbin443 -> 261 bytes
-rw-r--r--l10n/au/flag.pngbin257 -> 253 bytes
-rw-r--r--l10n/aw/flag.pngbin401 -> 268 bytes
-rw-r--r--l10n/az/flag.pngbin148 -> 148 bytes
-rw-r--r--l10n/ba/flag.pngbin622 -> 560 bytes
-rw-r--r--l10n/bb/flag.pngbin655 -> 501 bytes
-rw-r--r--l10n/bd/flag.pngbin255 -> 195 bytes
-rw-r--r--l10n/be/flag.pngbin206 -> 206 bytes
-rw-r--r--l10n/bf/flag.pngbin418 -> 259 bytes
-rw-r--r--l10n/bg/flag.pngbin203 -> 203 bytes
-rw-r--r--l10n/bh/flag.pngbin214 -> 213 bytes
-rw-r--r--l10n/bi/flag.pngbin663 -> 503 bytes
-rw-r--r--l10n/bj/flag.pngbin350 -> 200 bytes
-rw-r--r--l10n/bm/flag.pngbin760 -> 571 bytes
-rw-r--r--l10n/bn/flag.pngbin853 -> 634 bytes
-rw-r--r--l10n/bo/flag.pngbin744 -> 596 bytes
-rw-r--r--l10n/br/flag.pngbin380 -> 201 bytes
-rw-r--r--l10n/bs/flag.pngbin421 -> 264 bytes
-rw-r--r--l10n/bt/flag.pngbin856 -> 651 bytes
-rw-r--r--l10n/bw/flag.pngbin276 -> 143 bytes
-rw-r--r--l10n/by/flag.pngbin1169 -> 904 bytes
-rw-r--r--l10n/bz/flag.pngbin858 -> 633 bytes
-rw-r--r--l10n/ca/flag.pngbin310 -> 235 bytes
-rw-r--r--l10n/cc/flag.pngbin779 -> 598 bytes
-rw-r--r--l10n/cd/flag.pngbin602 -> 469 bytes
-rw-r--r--l10n/cf/flag.pngbin760 -> 554 bytes
-rw-r--r--l10n/cg/flag.pngbin391 -> 258 bytes
-rw-r--r--l10n/ch/flag.pngbin352 -> 128 bytes
-rw-r--r--l10n/ci/flag.pngbin272 -> 138 bytes
-rw-r--r--l10n/ck/flag.pngbin782 -> 595 bytes
-rw-r--r--l10n/cl/flag.pngbin626 -> 493 bytes
-rw-r--r--l10n/cm/flag.pngbin440 -> 307 bytes
-rw-r--r--l10n/cn/flag.pngbin357 -> 178 bytes
-rw-r--r--l10n/co/flag.pngbin399 -> 266 bytes
-rw-r--r--l10n/cr/flag.pngbin148 -> 118 bytes
-rw-r--r--l10n/cu/flag.pngbin276 -> 225 bytes
-rw-r--r--l10n/cv/flag.pngbin704 -> 500 bytes
-rw-r--r--l10n/cx/flag.pngbin851 -> 650 bytes
-rw-r--r--l10n/cy/flag.pngbin511 -> 377 bytes
-rw-r--r--l10n/cz/flag.pngbin386 -> 207 bytes
-rw-r--r--l10n/de/flag.pngbin357 -> 176 bytes
-rw-r--r--l10n/dj/flag.pngbin252 -> 245 bytes
-rw-r--r--l10n/dk/flag.pngbin224 -> 192 bytes
-rw-r--r--l10n/dm/flag.pngbin598 -> 404 bytes
-rw-r--r--l10n/do/flag.pngbin891 -> 740 bytes
-rw-r--r--l10n/dz/flag.pngbin187 -> 185 bytes
-rw-r--r--l10n/ec/flag.pngbin658 -> 515 bytes
-rw-r--r--l10n/ee/flag.pngbin381 -> 115 bytes
-rw-r--r--l10n/eg/flag.pngbin326 -> 319 bytes
-rw-r--r--l10n/eh/flag.pngbin716 -> 537 bytes
-rw-r--r--l10n/er/flag.pngbin882 -> 699 bytes
-rw-r--r--l10n/es/flag.pngbin348 -> 169 bytes
-rw-r--r--l10n/et/flag.pngbin486 -> 317 bytes
-rw-r--r--l10n/fi/flag.pngbin368 -> 189 bytes
-rw-r--r--l10n/fj/flag.pngbin855 -> 627 bytes
-rw-r--r--l10n/fk/flag.pngbin841 -> 626 bytes
-rw-r--r--l10n/fm/flag.pngbin352 -> 217 bytes
-rw-r--r--l10n/fo/flag.pngbin321 -> 258 bytes
-rw-r--r--l10n/fr/flag.pngbin331 -> 153 bytes
-rw-r--r--l10n/ga/flag.pngbin291 -> 155 bytes
-rw-r--r--l10n/gb/flag.pngbin419 -> 240 bytes
-rw-r--r--l10n/gd/flag.pngbin1267 -> 1086 bytes
-rw-r--r--l10n/ge/flag.pngbin227 -> 175 bytes
-rw-r--r--l10n/gh/flag.pngbin290 -> 290 bytes
-rw-r--r--l10n/gi/flag.pngbin525 -> 374 bytes
-rw-r--r--l10n/gl/flag.pngbin423 -> 338 bytes
-rw-r--r--l10n/gm/flag.pngbin306 -> 162 bytes
-rw-r--r--l10n/gn/flag.pngbin268 -> 135 bytes
-rw-r--r--l10n/gp/flag.pngbin471 -> 311 bytes
-rw-r--r--l10n/gq/flag.pngbin643 -> 491 bytes
-rw-r--r--l10n/gr/flag.pngbin377 -> 198 bytes
-rw-r--r--l10n/gt/flag.pngbin682 -> 549 bytes
-rw-r--r--l10n/gu/flag.pngbin626 -> 479 bytes
-rw-r--r--l10n/gw/flag.pngbin464 -> 304 bytes
-rw-r--r--l10n/gy/flag.pngbin837 -> 629 bytes
-rw-r--r--l10n/hk/flag.pngbin561 -> 425 bytes
-rw-r--r--l10n/hn/flag.pngbin533 -> 401 bytes
-rw-r--r--l10n/hr/flag.pngbin383 -> 204 bytes
-rw-r--r--l10n/ht/flag.pngbin278 -> 145 bytes
-rw-r--r--l10n/hu/flag.pngbin218 -> 217 bytes
-rw-r--r--l10n/id/flag.pngbin117 -> 103 bytes
-rw-r--r--l10n/ie/flag.pngbin333 -> 147 bytes
-rw-r--r--l10n/il/flag.pngbin166 -> 122 bytes
-rw-r--r--l10n/in/flag.pngbin222 -> 194 bytes
-rw-r--r--l10n/iq/flag.pngbin405 -> 400 bytes
-rw-r--r--l10n/ir/flag.pngbin150 -> 139 bytes
-rw-r--r--l10n/is/flag.pngbin207 -> 174 bytes
-rw-r--r--l10n/it/flag.pngbin332 -> 153 bytes
-rw-r--r--l10n/jm/flag.pngbin759 -> 626 bytes
-rw-r--r--l10n/jo/flag.pngbin350 -> 349 bytes
-rw-r--r--l10n/jp/flag.pngbin316 -> 130 bytes
-rw-r--r--l10n/ke/flag.pngbin769 -> 539 bytes
-rw-r--r--l10n/kg/flag.pngbin465 -> 322 bytes
-rw-r--r--l10n/kh/flag.pngbin568 -> 374 bytes
-rw-r--r--l10n/ki/flag.pngbin831 -> 617 bytes
-rw-r--r--l10n/km/flag.pngbin623 -> 490 bytes
-rw-r--r--l10n/kn/flag.pngbin858 -> 725 bytes
-rw-r--r--l10n/kp/flag.pngbin595 -> 462 bytes
-rw-r--r--l10n/kr/flag.pngbin272 -> 220 bytes
-rw-r--r--l10n/kw/flag.pngbin203 -> 199 bytes
-rw-r--r--l10n/ky/flag.pngbin957 -> 704 bytes
-rw-r--r--l10n/kz/flag.pngbin649 -> 501 bytes
-rw-r--r--l10n/la/flag.pngbin512 -> 357 bytes
-rw-r--r--l10n/lb/flag.pngbin541 -> 532 bytes
-rw-r--r--l10n/lc/flag.pngbin621 -> 467 bytes
-rw-r--r--l10n/li/flag.pngbin482 -> 334 bytes
-rw-r--r--l10n/lk/flag.pngbin873 -> 654 bytes
-rw-r--r--l10n/lr/flag.pngbin519 -> 325 bytes
-rw-r--r--l10n/ls/flag.pngbin833 -> 696 bytes
-rw-r--r--l10n/lt/flag.pngbin96 -> 90 bytes
-rw-r--r--l10n/lu/flag.pngbin457 -> 311 bytes
-rw-r--r--l10n/lv/flag.pngbin266 -> 230 bytes
-rw-r--r--l10n/ly/flag.pngbin162 -> 162 bytes
-rw-r--r--l10n/ma/flag.pngbin179 -> 176 bytes
-rw-r--r--l10n/mc/flag.pngbin264 -> 131 bytes
-rw-r--r--l10n/md/flag.pngbin531 -> 378 bytes
-rw-r--r--l10n/me/flag.pngbin359 -> 290 bytes
-rw-r--r--l10n/mg/flag.pngbin360 -> 210 bytes
-rw-r--r--l10n/mh/flag.pngbin845 -> 636 bytes
-rw-r--r--l10n/mk/flag.pngbin449 -> 267 bytes
-rw-r--r--l10n/ml/flag.pngbin268 -> 135 bytes
-rw-r--r--l10n/mm/flag.pngbin488 -> 338 bytes
-rw-r--r--l10n/mn/flag.pngbin457 -> 324 bytes
-rw-r--r--l10n/mo/flag.pngbin623 -> 475 bytes
-rw-r--r--l10n/mq/flag.pngbin863 -> 704 bytes
-rw-r--r--l10n/mr/flag.pngbin597 -> 464 bytes
-rw-r--r--l10n/ms/flag.pngbin748 -> 564 bytes
-rw-r--r--l10n/mt/flag.pngbin326 -> 326 bytes
-rw-r--r--l10n/mu/flag.pngbin321 -> 175 bytes
-rw-r--r--l10n/mv/flag.pngbin641 -> 492 bytes
-rw-r--r--l10n/mw/flag.pngbin504 -> 359 bytes
-rw-r--r--l10n/mx/flag.pngbin653 -> 520 bytes
-rw-r--r--l10n/my/flag.pngbin670 -> 468 bytes
-rw-r--r--l10n/mz/flag.pngbin681 -> 495 bytes
-rw-r--r--l10n/na/flag.pngbin773 -> 609 bytes
-rw-r--r--l10n/nc/flag.pngbin672 -> 469 bytes
-rw-r--r--l10n/ne/flag.pngbin476 -> 313 bytes
-rw-r--r--l10n/nf/flag.pngbin472 -> 335 bytes
-rw-r--r--l10n/ng/flag.pngbin255 -> 122 bytes
-rw-r--r--l10n/ni/flag.pngbin177 -> 145 bytes
-rw-r--r--l10n/nl/flag.pngbin135 -> 111 bytes
-rw-r--r--l10n/no/flag.pngbin196 -> 154 bytes
-rw-r--r--l10n/np/flag.pngbin721 -> 578 bytes
-rw-r--r--l10n/nr/flag.pngbin406 -> 260 bytes
-rw-r--r--l10n/nu/flag.pngbin595 -> 408 bytes
-rw-r--r--l10n/nz/flag.pngbin367 -> 367 bytes
-rw-r--r--l10n/om/flag.pngbin832 -> 820 bytes
-rw-r--r--l10n/pa/flag.pngbin906 -> 752 bytes
-rw-r--r--l10n/pe/flag.pngbin404 -> 266 bytes
-rw-r--r--l10n/pf/flag.pngbin587 -> 410 bytes
-rw-r--r--l10n/pg/flag.pngbin714 -> 579 bytes
-rw-r--r--l10n/ph/flag.pngbin578 -> 409 bytes
-rw-r--r--l10n/pk/flag.pngbin205 -> 149 bytes
-rw-r--r--l10n/pl/flag.pngbin153 -> 153 bytes
-rw-r--r--l10n/pm/flag.pngbin1083 -> 948 bytes
-rw-r--r--l10n/pn/flag.pngbin1001 -> 716 bytes
-rw-r--r--l10n/pr/flag.pngbin786 -> 569 bytes
-rw-r--r--l10n/ps/flag.pngbin198 -> 196 bytes
-rw-r--r--l10n/pt/flag.pngbin386 -> 204 bytes
-rw-r--r--l10n/pw/flag.pngbin560 -> 407 bytes
-rw-r--r--l10n/py/flag.pngbin650 -> 498 bytes
-rw-r--r--l10n/qa/flag.pngbin213 -> 213 bytes
-rw-r--r--l10n/ro/flag.pngbin152 -> 152 bytes
-rw-r--r--l10n/rs/flag.pngbin399 -> 321 bytes
-rw-r--r--l10n/ru/flag.pngbin346 -> 160 bytes
-rw-r--r--l10n/rw/flag.pngbin583 -> 446 bytes
-rw-r--r--l10n/sa/flag.pngbin231 -> 221 bytes
-rw-r--r--l10n/sb/flag.pngbin788 -> 586 bytes
-rw-r--r--l10n/sc/flag.pngbin816 -> 626 bytes
-rw-r--r--l10n/sd/flag.pngbin322 -> 318 bytes
-rw-r--r--l10n/se/flag.pngbin173 -> 171 bytes
-rw-r--r--l10n/sg/flag.pngbin458 -> 324 bytes
-rw-r--r--l10n/sh/flag.pngbin748 -> 566 bytes
-rw-r--r--l10n/si/flag.pngbin134 -> 134 bytes
-rw-r--r--l10n/sk/flag.pngbin398 -> 216 bytes
-rw-r--r--l10n/sm/flag.pngbin574 -> 404 bytes
-rw-r--r--l10n/sn/flag.pngbin439 -> 306 bytes
-rw-r--r--l10n/so/flag.pngbin228 -> 217 bytes
-rw-r--r--l10n/sr/flag.pngbin489 -> 322 bytes
-rw-r--r--l10n/st/flag.pngbin550 -> 389 bytes
-rw-r--r--l10n/sv/flag.pngbin594 -> 446 bytes
-rw-r--r--l10n/sy/flag.pngbin227 -> 218 bytes
-rw-r--r--l10n/sz/flag.pngbin842 -> 708 bytes
-rw-r--r--l10n/tc/flag.pngbin824 -> 620 bytes
-rw-r--r--l10n/td/flag.pngbin268 -> 135 bytes
-rw-r--r--l10n/tg/flag.pngbin571 -> 415 bytes
-rw-r--r--l10n/th/flag.pngbin104 -> 101 bytes
-rw-r--r--l10n/tj/flag.pngbin451 -> 304 bytes
-rw-r--r--l10n/tk/flag.pngbin637 -> 475 bytes
-rw-r--r--l10n/tm/flag.pngbin571 -> 404 bytes
-rw-r--r--l10n/tn/flag.pngbin182 -> 182 bytes
-rw-r--r--l10n/to/flag.pngbin413 -> 279 bytes
-rw-r--r--l10n/tp/flag.pngbin540 -> 403 bytes
-rw-r--r--l10n/tr/flag.pngbin310 -> 131 bytes
-rw-r--r--l10n/tt/flag.pngbin749 -> 616 bytes
-rw-r--r--l10n/tv/flag.pngbin769 -> 563 bytes
-rw-r--r--l10n/tw/flag.pngbin235 -> 235 bytes
-rw-r--r--l10n/tz/flag.pngbin689 -> 555 bytes
-rw-r--r--l10n/ua/flag.pngbin201 -> 145 bytes
-rw-r--r--l10n/ug/flag.pngbin516 -> 357 bytes
-rw-r--r--l10n/us/flag.pngbin311 -> 132 bytes
-rw-r--r--l10n/uy/flag.pngbin775 -> 641 bytes
-rw-r--r--l10n/uz/flag.pngbin306 -> 288 bytes
-rw-r--r--l10n/va/flag.pngbin535 -> 367 bytes
-rw-r--r--l10n/vc/flag.pngbin659 -> 503 bytes
-rw-r--r--l10n/ve/flag.pngbin888 -> 748 bytes
-rw-r--r--l10n/vg/flag.pngbin816 -> 601 bytes
-rw-r--r--l10n/vi/flag.pngbin1031 -> 792 bytes
-rw-r--r--l10n/vn/flag.pngbin203 -> 203 bytes
-rw-r--r--l10n/vu/flag.pngbin739 -> 525 bytes
-rw-r--r--l10n/wf/flag.pngbin604 -> 451 bytes
-rw-r--r--l10n/ws/flag.pngbin496 -> 314 bytes
-rw-r--r--l10n/ye/flag.pngbin217 -> 209 bytes
-rw-r--r--l10n/za/flag.pngbin1056 -> 923 bytes
-rw-r--r--l10n/zm/flag.pngbin535 -> 354 bytes
-rw-r--r--l10n/zw/flag.pngbin555 -> 372 bytes
-rw-r--r--libkonq/konq_iconviewwidget.cc10
-rw-r--r--libkonq/pics/arrow_bottomleft.pngbin163 -> 149 bytes
-rw-r--r--libkonq/pics/arrow_bottomright.pngbin163 -> 147 bytes
-rw-r--r--libkonq/pics/arrow_topleft.pngbin163 -> 147 bytes
-rw-r--r--libkonq/pics/arrow_topright.pngbin161 -> 149 bytes
-rw-r--r--libkonq/pics/thumbnailfont_7x4.pngbin965 -> 929 bytes
-rw-r--r--pics/crystalsvg/cr128-app-acroread.pngbin9349 -> 8120 bytes
-rw-r--r--pics/crystalsvg/cr128-app-applixware.pngbin4974 -> 4166 bytes
-rw-r--r--pics/crystalsvg/cr128-app-clanbomber.pngbin6450 -> 5533 bytes
-rw-r--r--pics/crystalsvg/cr128-app-email.pngbin14113 -> 12450 bytes
-rw-r--r--pics/crystalsvg/cr128-app-gimp.pngbin23401 -> 23106 bytes
-rw-r--r--pics/crystalsvg/cr128-app-kfm_home.pngbin11267 -> 11105 bytes
-rw-r--r--pics/crystalsvg/cr128-app-licq.pngbin13389 -> 11136 bytes
-rw-r--r--pics/crystalsvg/cr128-app-linuxconf.pngbin15242 -> 13291 bytes
-rw-r--r--pics/crystalsvg/cr128-app-netscape.pngbin7762 -> 6749 bytes
-rw-r--r--pics/crystalsvg/cr128-app-package.pngbin12803 -> 11218 bytes
-rw-r--r--pics/crystalsvg/cr128-app-package_applications.pngbin15170 -> 12817 bytes
-rw-r--r--pics/crystalsvg/cr128-app-package_favourite.pngbin16553 -> 14176 bytes
-rw-r--r--pics/crystalsvg/cr128-app-package_settings.pngbin10179 -> 9248 bytes
-rw-r--r--pics/crystalsvg/cr128-app-package_toys.pngbin16017 -> 14880 bytes
-rw-r--r--pics/crystalsvg/cr128-app-penguin.pngbin16139 -> 14912 bytes
-rw-r--r--pics/crystalsvg/cr128-app-phppg.pngbin14337 -> 11916 bytes
-rw-r--r--pics/crystalsvg/cr128-app-pysol.pngbin8595 -> 7189 bytes
-rw-r--r--pics/crystalsvg/cr128-app-randr.pngbin7059 -> 7009 bytes
-rw-r--r--pics/crystalsvg/cr128-app-staroffice.pngbin23182 -> 19792 bytes
-rw-r--r--pics/crystalsvg/cr128-app-systemtray.pngbin13894 -> 12744 bytes
-rw-r--r--pics/crystalsvg/cr128-app-taskbar.pngbin8465 -> 8016 bytes
-rw-r--r--pics/crystalsvg/cr128-app-terminal.pngbin5284 -> 4560 bytes
-rw-r--r--pics/crystalsvg/cr128-app-tux.pngbin9438 -> 8579 bytes
-rw-r--r--pics/crystalsvg/cr128-app-wp.pngbin21496 -> 19208 bytes
-rw-r--r--pics/crystalsvg/cr128-app-xclock.pngbin20970 -> 19640 bytes
-rw-r--r--pics/crystalsvg/cr128-app-xfmail.pngbin20619 -> 19790 bytes
-rw-r--r--pics/crystalsvg/cr128-app-xmag.pngbin12589 -> 10940 bytes
-rw-r--r--pics/crystalsvg/cr128-category-applications-development.pngbin8370 -> 8003 bytes
-rw-r--r--pics/crystalsvg/cr128-category-applications-games.pngbin13000 -> 11568 bytes
-rw-r--r--pics/crystalsvg/cr128-category-applications-internet.pngbin16916 -> 16277 bytes
-rw-r--r--pics/crystalsvg/cr128-category-applications-multimedia.pngbin12789 -> 9893 bytes
-rw-r--r--pics/crystalsvg/cr128-category-applications-utilities.pngbin11665 -> 10741 bytes
-rw-r--r--pics/crystalsvg/cr16-app-abiword.pngbin835 -> 806 bytes
-rw-r--r--pics/crystalsvg/cr16-app-acroread.pngbin944 -> 777 bytes
-rw-r--r--pics/crystalsvg/cr16-app-alevt.pngbin265 -> 265 bytes
-rw-r--r--pics/crystalsvg/cr16-app-applixware.pngbin551 -> 495 bytes
-rw-r--r--pics/crystalsvg/cr16-app-assistant.pngbin875 -> 868 bytes
-rw-r--r--pics/crystalsvg/cr16-app-blender.pngbin787 -> 727 bytes
-rw-r--r--pics/crystalsvg/cr16-app-bluefish.pngbin823 -> 821 bytes
-rw-r--r--pics/crystalsvg/cr16-app-clanbomber.pngbin846 -> 785 bytes
-rw-r--r--pics/crystalsvg/cr16-app-designer.pngbin271 -> 271 bytes
-rw-r--r--pics/crystalsvg/cr16-app-dia.pngbin622 -> 580 bytes
-rw-r--r--pics/crystalsvg/cr16-app-dlgedit.pngbin250 -> 250 bytes
-rw-r--r--pics/crystalsvg/cr16-app-eclipse.pngbin812 -> 812 bytes
-rw-r--r--pics/crystalsvg/cr16-app-edu_languages.pngbin971 -> 836 bytes
-rw-r--r--pics/crystalsvg/cr16-app-edu_mathematics.pngbin730 -> 653 bytes
-rw-r--r--pics/crystalsvg/cr16-app-edu_miscellaneous.pngbin950 -> 825 bytes
-rw-r--r--pics/crystalsvg/cr16-app-emacs.pngbin272 -> 267 bytes
-rw-r--r--pics/crystalsvg/cr16-app-email.pngbin1015 -> 885 bytes
-rw-r--r--pics/crystalsvg/cr16-app-evolution.pngbin866 -> 836 bytes
-rw-r--r--pics/crystalsvg/cr16-app-fifteenpieces.pngbin811 -> 811 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gabber.pngbin737 -> 649 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gaim.pngbin691 -> 691 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gimp.pngbin894 -> 894 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gnome_apps.pngbin1118 -> 941 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gnomemeeting.pngbin899 -> 892 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gnucash.pngbin771 -> 771 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gnumeric.pngbin784 -> 784 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gv.pngbin226 -> 226 bytes
-rw-r--r--pics/crystalsvg/cr16-app-gvim.pngbin904 -> 880 bytes
-rw-r--r--pics/crystalsvg/cr16-app-kbinaryclock.pngbin840 -> 779 bytes
-rw-r--r--pics/crystalsvg/cr16-app-kfm_home.pngbin713 -> 679 bytes
-rw-r--r--pics/crystalsvg/cr16-app-kvirc.pngbin836 -> 834 bytes
-rw-r--r--pics/crystalsvg/cr16-app-licq.pngbin1043 -> 831 bytes
-rw-r--r--pics/crystalsvg/cr16-app-linguist.pngbin752 -> 725 bytes
-rw-r--r--pics/crystalsvg/cr16-app-linuxconf.pngbin1097 -> 917 bytes
-rw-r--r--pics/crystalsvg/cr16-app-lyx.pngbin307 -> 306 bytes
-rw-r--r--pics/crystalsvg/cr16-app-mathematica.pngbin315 -> 315 bytes
-rw-r--r--pics/crystalsvg/cr16-app-nedit.pngbin927 -> 882 bytes
-rw-r--r--pics/crystalsvg/cr16-app-netscape.pngbin1013 -> 769 bytes
-rw-r--r--pics/crystalsvg/cr16-app-opera.pngbin904 -> 852 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package.pngbin1029 -> 870 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_application.pngbin551 -> 549 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_applications.pngbin959 -> 791 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_editors.pngbin834 -> 805 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_edutainment.pngbin1031 -> 857 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_favourite.pngbin1114 -> 936 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_games_arcade.pngbin841 -> 729 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_games_board.pngbin1053 -> 934 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_games_card.pngbin1013 -> 885 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_games_kids.pngbin324 -> 266 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_games_strategy.pngbin359 -> 353 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_settings.pngbin807 -> 674 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_system.pngbin903 -> 780 bytes
-rw-r--r--pics/crystalsvg/cr16-app-package_toys.pngbin894 -> 894 bytes
-rw-r--r--pics/crystalsvg/cr16-app-pan.pngbin1005 -> 980 bytes
-rw-r--r--pics/crystalsvg/cr16-app-penguin.pngbin964 -> 847 bytes
-rw-r--r--pics/crystalsvg/cr16-app-phppg.pngbin962 -> 822 bytes
-rw-r--r--pics/crystalsvg/cr16-app-plan.pngbin294 -> 292 bytes
-rw-r--r--pics/crystalsvg/cr16-app-planner.pngbin603 -> 601 bytes
-rw-r--r--pics/crystalsvg/cr16-app-pybliographic.pngbin545 -> 488 bytes
-rw-r--r--pics/crystalsvg/cr16-app-randr.pngbin724 -> 643 bytes
-rw-r--r--pics/crystalsvg/cr16-app-realplayer.pngbin710 -> 703 bytes
-rw-r--r--pics/crystalsvg/cr16-app-remote.pngbin957 -> 766 bytes
-rw-r--r--pics/crystalsvg/cr16-app-runprocesscatcher.pngbin416 -> 391 bytes
-rw-r--r--pics/crystalsvg/cr16-app-scribus.pngbin1003 -> 1003 bytes
-rw-r--r--pics/crystalsvg/cr16-app-sodipodi.pngbin756 -> 720 bytes
-rw-r--r--pics/crystalsvg/cr16-app-systemtray.pngbin793 -> 769 bytes
-rw-r--r--pics/crystalsvg/cr16-app-terminal.pngbin666 -> 606 bytes
-rw-r--r--pics/crystalsvg/cr16-app-tux.pngbin687 -> 658 bytes
-rw-r--r--pics/crystalsvg/cr16-app-vnc.pngbin786 -> 781 bytes
-rw-r--r--pics/crystalsvg/cr16-app-wabi.pngbin944 -> 784 bytes
-rw-r--r--pics/crystalsvg/cr16-app-wine.pngbin979 -> 979 bytes
-rw-r--r--pics/crystalsvg/cr16-app-wp.pngbin1149 -> 1000 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xcalc.pngbin944 -> 943 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xchat.pngbin842 -> 811 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xclipboard.pngbin263 -> 263 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xclock.pngbin992 -> 926 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xconsole.pngbin205 -> 205 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xedit.pngbin787 -> 670 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xemacs.pngbin272 -> 267 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xeyes.pngbin724 -> 660 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xfig.pngbin788 -> 729 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xfmail.pngbin922 -> 896 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xload.pngbin191 -> 191 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xmag.pngbin859 -> 787 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xmms.pngbin889 -> 880 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xosview.pngbin250 -> 250 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xpaint.pngbin825 -> 792 bytes
-rw-r--r--pics/crystalsvg/cr16-app-xv.pngbin245 -> 243 bytes
-rw-r--r--pics/crystalsvg/cr16-category-applications-development.pngbin961 -> 766 bytes
-rw-r--r--pics/crystalsvg/cr16-category-applications-games.pngbin991 -> 860 bytes
-rw-r--r--pics/crystalsvg/cr16-category-applications-graphics.pngbin638 -> 596 bytes
-rw-r--r--pics/crystalsvg/cr16-category-applications-internet.pngbin918 -> 916 bytes
-rw-r--r--pics/crystalsvg/cr16-category-applications-multimedia.pngbin781 -> 707 bytes
-rw-r--r--pics/crystalsvg/cr16-category-applications-office.pngbin991 -> 850 bytes
-rw-r--r--pics/crystalsvg/cr16-category-applications-science.pngbin993 -> 828 bytes
-rw-r--r--pics/crystalsvg/cr16-category-applications-utilities.pngbin843 -> 807 bytes
-rw-r--r--pics/crystalsvg/cr22-app-email.pngbin1200 -> 1189 bytes
-rw-r--r--pics/crystalsvg/cr22-app-fifteenpieces.pngbin1139 -> 1138 bytes
-rw-r--r--pics/crystalsvg/cr22-app-kbinaryclock.pngbin1283 -> 1178 bytes
-rw-r--r--pics/crystalsvg/cr22-app-kvirc.pngbin1330 -> 1323 bytes
-rw-r--r--pics/crystalsvg/cr22-app-nedit.pngbin1457 -> 1417 bytes
-rw-r--r--pics/crystalsvg/cr22-app-randr.pngbin1009 -> 895 bytes
-rw-r--r--pics/crystalsvg/cr22-app-runprocesscatcher.pngbin896 -> 759 bytes
-rw-r--r--pics/crystalsvg/cr22-app-systemtray.pngbin1235 -> 1171 bytes
-rw-r--r--pics/crystalsvg/cr22-app-taskbar.pngbin1066 -> 1059 bytes
-rw-r--r--pics/crystalsvg/cr22-category-applications-development.pngbin935 -> 934 bytes
-rw-r--r--pics/crystalsvg/cr32-app-abiword.pngbin2346 -> 2291 bytes
-rw-r--r--pics/crystalsvg/cr32-app-acroread.pngbin1787 -> 1521 bytes
-rw-r--r--pics/crystalsvg/cr32-app-alevt.pngbin390 -> 389 bytes
-rw-r--r--pics/crystalsvg/cr32-app-applixware.pngbin1236 -> 1144 bytes
-rw-r--r--pics/crystalsvg/cr32-app-blender.pngbin2007 -> 1990 bytes
-rw-r--r--pics/crystalsvg/cr32-app-bluefish.pngbin2092 -> 2092 bytes
-rw-r--r--pics/crystalsvg/cr32-app-clanbomber.pngbin1416 -> 1253 bytes
-rw-r--r--pics/crystalsvg/cr32-app-designer.pngbin324 -> 316 bytes
-rw-r--r--pics/crystalsvg/cr32-app-dia.pngbin1532 -> 1459 bytes
-rw-r--r--pics/crystalsvg/cr32-app-dlgedit.pngbin342 -> 342 bytes
-rw-r--r--pics/crystalsvg/cr32-app-eclipse.pngbin2296 -> 2268 bytes
-rw-r--r--pics/crystalsvg/cr32-app-edu_languages.pngbin2710 -> 2222 bytes
-rw-r--r--pics/crystalsvg/cr32-app-edu_mathematics.pngbin1615 -> 1392 bytes
-rw-r--r--pics/crystalsvg/cr32-app-edu_miscellaneous.pngbin2433 -> 2053 bytes
-rw-r--r--pics/crystalsvg/cr32-app-emacs.pngbin2152 -> 1833 bytes
-rw-r--r--pics/crystalsvg/cr32-app-email.pngbin2460 -> 2109 bytes
-rw-r--r--pics/crystalsvg/cr32-app-evolution.pngbin2541 -> 2405 bytes
-rw-r--r--pics/crystalsvg/cr32-app-fifteenpieces.pngbin1629 -> 1619 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gabber.pngbin1812 -> 1795 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gaim.pngbin1712 -> 1712 bytes
-rw-r--r--pics/crystalsvg/cr32-app-galeon.pngbin3166 -> 2632 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gimp.pngbin2592 -> 2583 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gnome_apps.pngbin3000 -> 2559 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gnomemeeting.pngbin2299 -> 2276 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gnucash.pngbin2143 -> 2143 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gnumeric.pngbin1835 -> 1834 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gv.pngbin344 -> 343 bytes
-rw-r--r--pics/crystalsvg/cr32-app-gvim.pngbin2453 -> 2307 bytes
-rw-r--r--pics/crystalsvg/cr32-app-kbinaryclock.pngbin2058 -> 1854 bytes
-rw-r--r--pics/crystalsvg/cr32-app-kfm_home.pngbin2539 -> 2125 bytes
-rw-r--r--pics/crystalsvg/cr32-app-kvirc.pngbin2078 -> 2068 bytes
-rw-r--r--pics/crystalsvg/cr32-app-licq.pngbin2413 -> 1926 bytes
-rw-r--r--pics/crystalsvg/cr32-app-linuxconf.pngbin2310 -> 1981 bytes
-rw-r--r--pics/crystalsvg/cr32-app-lyx.pngbin528 -> 528 bytes
-rw-r--r--pics/crystalsvg/cr32-app-mathematica.pngbin522 -> 521 bytes
-rw-r--r--pics/crystalsvg/cr32-app-nedit.pngbin2424 -> 2291 bytes
-rw-r--r--pics/crystalsvg/cr32-app-netscape.pngbin1895 -> 1542 bytes
-rw-r--r--pics/crystalsvg/cr32-app-opera.pngbin2218 -> 2096 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package.pngbin2379 -> 1966 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_applications.pngbin2358 -> 1961 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_editors.pngbin2299 -> 2213 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_edutainment.pngbin2437 -> 2053 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_favourite.pngbin2639 -> 2156 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_games_arcade.pngbin1874 -> 1594 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_games_board.pngbin2996 -> 2609 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_games_card.pngbin2253 -> 1950 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_games_kids.pngbin729 -> 574 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_games_strategy.pngbin1649 -> 1639 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_settings.pngbin1806 -> 1465 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_system.pngbin2381 -> 1909 bytes
-rw-r--r--pics/crystalsvg/cr32-app-package_toys.pngbin2604 -> 2589 bytes
-rw-r--r--pics/crystalsvg/cr32-app-pan.pngbin3083 -> 2763 bytes
-rw-r--r--pics/crystalsvg/cr32-app-penguin.pngbin2016 -> 1774 bytes
-rw-r--r--pics/crystalsvg/cr32-app-phppg.pngbin2381 -> 1936 bytes
-rw-r--r--pics/crystalsvg/cr32-app-pinguin.pngbin682 -> 674 bytes
-rw-r--r--pics/crystalsvg/cr32-app-plan.pngbin456 -> 456 bytes
-rw-r--r--pics/crystalsvg/cr32-app-planner.pngbin1254 -> 1254 bytes
-rw-r--r--pics/crystalsvg/cr32-app-pybliographic.pngbin1388 -> 1347 bytes
-rw-r--r--pics/crystalsvg/cr32-app-pysol.pngbin1686 -> 1315 bytes
-rw-r--r--pics/crystalsvg/cr32-app-randr.pngbin1475 -> 1310 bytes
-rw-r--r--pics/crystalsvg/cr32-app-realplayer.pngbin1850 -> 1796 bytes
-rw-r--r--pics/crystalsvg/cr32-app-runprocesscatcher.pngbin1183 -> 839 bytes
-rw-r--r--pics/crystalsvg/cr32-app-scribus.pngbin2687 -> 2687 bytes
-rw-r--r--pics/crystalsvg/cr32-app-sodipodi.pngbin2081 -> 1999 bytes
-rw-r--r--pics/crystalsvg/cr32-app-systemtray.pngbin1996 -> 1839 bytes
-rw-r--r--pics/crystalsvg/cr32-app-taskbar.pngbin1673 -> 1669 bytes
-rw-r--r--pics/crystalsvg/cr32-app-terminal.pngbin1239 -> 1142 bytes
-rw-r--r--pics/crystalsvg/cr32-app-tux.pngbin1790 -> 1679 bytes
-rw-r--r--pics/crystalsvg/cr32-app-vnc.pngbin1817 -> 1805 bytes
-rw-r--r--pics/crystalsvg/cr32-app-wabi.pngbin2157 -> 1728 bytes
-rw-r--r--pics/crystalsvg/cr32-app-wine.pngbin1226 -> 1226 bytes
-rw-r--r--pics/crystalsvg/cr32-app-wp.pngbin3181 -> 2714 bytes
-rw-r--r--pics/crystalsvg/cr32-app-x.pngbin1232 -> 1057 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xapp.pngbin1232 -> 1057 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xawtv.pngbin526 -> 519 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xcalc.pngbin2342 -> 2325 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xchat.pngbin2181 -> 2057 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xclipboard.pngbin363 -> 363 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xclock.pngbin2735 -> 2529 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xconsole.pngbin1239 -> 1142 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xedit.pngbin1926 -> 1597 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xemacs.pngbin2152 -> 1833 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xeyes.pngbin2074 -> 1653 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xfig.pngbin2491 -> 2277 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xfmail.pngbin2571 -> 2566 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xload.pngbin226 -> 226 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xmag.pngbin1964 -> 1597 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xmms.pngbin2507 -> 2491 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xosview.pngbin356 -> 355 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xpaint.pngbin2308 -> 2270 bytes
-rw-r--r--pics/crystalsvg/cr32-app-xv.pngbin875 -> 591 bytes
-rw-r--r--pics/crystalsvg/cr32-category-applications-development.pngbin1406 -> 1402 bytes
-rw-r--r--pics/crystalsvg/cr32-category-applications-games.pngbin2307 -> 1866 bytes
-rw-r--r--pics/crystalsvg/cr32-category-applications-graphics.pngbin1688 -> 1639 bytes
-rw-r--r--pics/crystalsvg/cr32-category-applications-internet.pngbin2637 -> 2608 bytes
-rw-r--r--pics/crystalsvg/cr32-category-applications-multimedia.pngbin2186 -> 1895 bytes
-rw-r--r--pics/crystalsvg/cr32-category-applications-office.pngbin2935 -> 2420 bytes
-rw-r--r--pics/crystalsvg/cr32-category-applications-science.pngbin2650 -> 2148 bytes
-rw-r--r--pics/crystalsvg/cr32-category-applications-utilities.pngbin2057 -> 2041 bytes
-rw-r--r--pics/crystalsvg/cr48-app-abiword.pngbin3949 -> 3923 bytes
-rw-r--r--pics/crystalsvg/cr48-app-acroread.pngbin2916 -> 2490 bytes
-rw-r--r--pics/crystalsvg/cr48-app-applixware.pngbin1983 -> 1796 bytes
-rw-r--r--pics/crystalsvg/cr48-app-blender.pngbin3563 -> 3531 bytes
-rw-r--r--pics/crystalsvg/cr48-app-bluefish.pngbin3463 -> 3463 bytes
-rw-r--r--pics/crystalsvg/cr48-app-clanbomber.pngbin2232 -> 1940 bytes
-rw-r--r--pics/crystalsvg/cr48-app-designer.pngbin1169 -> 887 bytes
-rw-r--r--pics/crystalsvg/cr48-app-dia.pngbin2565 -> 2375 bytes
-rw-r--r--pics/crystalsvg/cr48-app-eclipse.pngbin3821 -> 2686 bytes
-rw-r--r--pics/crystalsvg/cr48-app-edu_languages.pngbin4740 -> 3863 bytes
-rw-r--r--pics/crystalsvg/cr48-app-edu_mathematics.pngbin2660 -> 2232 bytes
-rw-r--r--pics/crystalsvg/cr48-app-edu_miscellaneous.pngbin4237 -> 3549 bytes
-rw-r--r--pics/crystalsvg/cr48-app-emacs.pngbin2752 -> 1790 bytes
-rw-r--r--pics/crystalsvg/cr48-app-email.pngbin4142 -> 3542 bytes
-rw-r--r--pics/crystalsvg/cr48-app-evolution.pngbin5182 -> 4199 bytes
-rw-r--r--pics/crystalsvg/cr48-app-fifteenpieces.pngbin2461 -> 2422 bytes
-rw-r--r--pics/crystalsvg/cr48-app-gabber.pngbin2916 -> 2916 bytes
-rw-r--r--pics/crystalsvg/cr48-app-gaim.pngbin3671 -> 2955 bytes
-rw-r--r--pics/crystalsvg/cr48-app-galeon.pngbin5754 -> 4816 bytes
-rw-r--r--pics/crystalsvg/cr48-app-gimp.pngbin4929 -> 4895 bytes
-rw-r--r--pics/crystalsvg/cr48-app-gnome_apps.pngbin5471 -> 4697 bytes
-rw-r--r--pics/crystalsvg/cr48-app-gnomemeeting.pngbin3771 -> 3621 bytes
-rw-r--r--pics/crystalsvg/cr48-app-gnucash.pngbin3826 -> 3731 bytes
-rw-r--r--pics/crystalsvg/cr48-app-gnumeric.pngbin2712 -> 2712 bytes
-rw-r--r--pics/crystalsvg/cr48-app-gvim.pngbin3689 -> 3305 bytes
-rw-r--r--pics/crystalsvg/cr48-app-kbinaryclock.pngbin3586 -> 3226 bytes
-rw-r--r--pics/crystalsvg/cr48-app-kfm_home.pngbin3719 -> 3675 bytes
-rw-r--r--pics/crystalsvg/cr48-app-kvirc.pngbin3747 -> 3700 bytes
-rw-r--r--pics/crystalsvg/cr48-app-licq.pngbin4129 -> 3358 bytes
-rw-r--r--pics/crystalsvg/cr48-app-linuxconf.pngbin4520 -> 3854 bytes
-rw-r--r--pics/crystalsvg/cr48-app-nedit.pngbin4859 -> 4694 bytes
-rw-r--r--pics/crystalsvg/cr48-app-netscape.pngbin4973 -> 1922 bytes
-rw-r--r--pics/crystalsvg/cr48-app-opera.pngbin4032 -> 3721 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package.pngbin4253 -> 3539 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_applications.pngbin3839 -> 3239 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_editors.pngbin4047 -> 3547 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_edutainment.pngbin4237 -> 3549 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_favourite.pngbin4728 -> 3904 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_games_arcade.pngbin3060 -> 2594 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_games_board.pngbin5401 -> 4805 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_games_card.pngbin3576 -> 3418 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_games_kids.pngbin1208 -> 998 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_games_strategy.pngbin2996 -> 2951 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_settings.pngbin3570 -> 2837 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_system.pngbin4135 -> 3202 bytes
-rw-r--r--pics/crystalsvg/cr48-app-package_toys.pngbin4840 -> 4828 bytes
-rw-r--r--pics/crystalsvg/cr48-app-pan.pngbin4909 -> 4817 bytes
-rw-r--r--pics/crystalsvg/cr48-app-penguin.pngbin4083 -> 3612 bytes
-rw-r--r--pics/crystalsvg/cr48-app-phppg.pngbin3810 -> 3095 bytes
-rw-r--r--pics/crystalsvg/cr48-app-planner.pngbin1805 -> 1802 bytes
-rw-r--r--pics/crystalsvg/cr48-app-pysol.pngbin2696 -> 2079 bytes
-rw-r--r--pics/crystalsvg/cr48-app-randr.pngbin2440 -> 2167 bytes
-rw-r--r--pics/crystalsvg/cr48-app-remote.pngbin1921 -> 1651 bytes
-rw-r--r--pics/crystalsvg/cr48-app-scribus.pngbin5253 -> 4462 bytes
-rw-r--r--pics/crystalsvg/cr48-app-sodipodi.pngbin3814 -> 3513 bytes
-rw-r--r--pics/crystalsvg/cr48-app-staroffice.pngbin5344 -> 4413 bytes
-rw-r--r--pics/crystalsvg/cr48-app-systemtray.pngbin3431 -> 3139 bytes
-rw-r--r--pics/crystalsvg/cr48-app-taskbar.pngbin2672 -> 2638 bytes
-rw-r--r--pics/crystalsvg/cr48-app-terminal.pngbin2009 -> 1849 bytes
-rw-r--r--pics/crystalsvg/cr48-app-tux.pngbin3076 -> 3032 bytes
-rw-r--r--pics/crystalsvg/cr48-app-vnc.pngbin2457 -> 2408 bytes
-rw-r--r--pics/crystalsvg/cr48-app-wine.pngbin1581 -> 1581 bytes
-rw-r--r--pics/crystalsvg/cr48-app-wmaker_apps.pngbin3216 -> 3096 bytes
-rw-r--r--pics/crystalsvg/cr48-app-wp.pngbin5736 -> 4867 bytes
-rw-r--r--pics/crystalsvg/cr48-app-xchat.pngbin3144 -> 2676 bytes
-rw-r--r--pics/crystalsvg/cr48-app-xclock.pngbin5107 -> 4712 bytes
-rw-r--r--pics/crystalsvg/cr48-app-xedit.pngbin3507 -> 2856 bytes
-rw-r--r--pics/crystalsvg/cr48-app-xemacs.pngbin2752 -> 1790 bytes
-rw-r--r--pics/crystalsvg/cr48-app-xfmail.pngbin5244 -> 5223 bytes
-rw-r--r--pics/crystalsvg/cr48-app-xmag.pngbin3086 -> 2620 bytes
-rw-r--r--pics/crystalsvg/cr48-app-xv.pngbin867 -> 584 bytes
-rw-r--r--pics/crystalsvg/cr48-category-applications-development.pngbin2362 -> 2334 bytes
-rw-r--r--pics/crystalsvg/cr48-category-applications-games.pngbin3752 -> 3115 bytes
-rw-r--r--pics/crystalsvg/cr48-category-applications-graphics.pngbin3136 -> 3094 bytes
-rw-r--r--pics/crystalsvg/cr48-category-applications-internet.pngbin4737 -> 4714 bytes
-rw-r--r--pics/crystalsvg/cr48-category-applications-multimedia.pngbin4183 -> 3466 bytes
-rw-r--r--pics/crystalsvg/cr48-category-applications-office.pngbin5563 -> 4637 bytes
-rw-r--r--pics/crystalsvg/cr48-category-applications-science.pngbin4390 -> 3581 bytes
-rw-r--r--pics/crystalsvg/cr48-category-applications-utilities.pngbin3982 -> 3686 bytes
-rw-r--r--pics/crystalsvg/cr64-app-acroread.pngbin4025 -> 3456 bytes
-rw-r--r--pics/crystalsvg/cr64-app-applixware.pngbin2747 -> 2374 bytes
-rw-r--r--pics/crystalsvg/cr64-app-clanbomber.pngbin2990 -> 2673 bytes
-rw-r--r--pics/crystalsvg/cr64-app-email.pngbin6267 -> 5413 bytes
-rw-r--r--pics/crystalsvg/cr64-app-gimp.pngbin7735 -> 7678 bytes
-rw-r--r--pics/crystalsvg/cr64-app-gvim.pngbin8249 -> 7348 bytes
-rw-r--r--pics/crystalsvg/cr64-app-kfm_home.pngbin5212 -> 5128 bytes
-rw-r--r--pics/crystalsvg/cr64-app-kvirc.pngbin4772 -> 4659 bytes
-rw-r--r--pics/crystalsvg/cr64-app-licq.pngbin5770 -> 4710 bytes
-rw-r--r--pics/crystalsvg/cr64-app-linuxconf.pngbin6269 -> 5396 bytes
-rw-r--r--pics/crystalsvg/cr64-app-nedit.pngbin6921 -> 6424 bytes
-rw-r--r--pics/crystalsvg/cr64-app-netscape.pngbin3787 -> 3145 bytes
-rw-r--r--pics/crystalsvg/cr64-app-package.pngbin5972 -> 4977 bytes
-rw-r--r--pics/crystalsvg/cr64-app-package_applications.pngbin6179 -> 5153 bytes
-rw-r--r--pics/crystalsvg/cr64-app-package_favourite.pngbin6739 -> 5601 bytes
-rw-r--r--pics/crystalsvg/cr64-app-package_settings.pngbin4711 -> 4099 bytes
-rw-r--r--pics/crystalsvg/cr64-app-package_toys.pngbin7265 -> 7204 bytes
-rw-r--r--pics/crystalsvg/cr64-app-penguin.pngbin6775 -> 6017 bytes
-rw-r--r--pics/crystalsvg/cr64-app-phppg.pngbin5755 -> 4680 bytes
-rw-r--r--pics/crystalsvg/cr64-app-pysol.pngbin3647 -> 2833 bytes
-rw-r--r--pics/crystalsvg/cr64-app-qtella.pngbin6047 -> 5158 bytes
-rw-r--r--pics/crystalsvg/cr64-app-randr.pngbin3222 -> 2855 bytes
-rw-r--r--pics/crystalsvg/cr64-app-staroffice.pngbin8316 -> 6834 bytes
-rw-r--r--pics/crystalsvg/cr64-app-systemtray.pngbin4864 -> 4528 bytes
-rw-r--r--pics/crystalsvg/cr64-app-taskbar.pngbin3462 -> 3368 bytes
-rw-r--r--pics/crystalsvg/cr64-app-terminal.pngbin2706 -> 2483 bytes
-rw-r--r--pics/crystalsvg/cr64-app-tux.pngbin4382 -> 4233 bytes
-rw-r--r--pics/crystalsvg/cr64-app-wp.pngbin9481 -> 7905 bytes
-rw-r--r--pics/crystalsvg/cr64-app-xclock.pngbin7839 -> 7286 bytes
-rw-r--r--pics/crystalsvg/cr64-app-xfmail.pngbin7745 -> 7669 bytes
-rw-r--r--pics/crystalsvg/cr64-app-xmag.pngbin5006 -> 4387 bytes
-rw-r--r--pics/crystalsvg/cr64-category-applications-development.pngbin3419 -> 3358 bytes
-rw-r--r--pics/crystalsvg/cr64-category-applications-games.pngbin5444 -> 4579 bytes
-rw-r--r--pics/crystalsvg/cr64-category-applications-internet.pngbin7129 -> 7068 bytes
-rw-r--r--pics/crystalsvg/cr64-category-applications-multimedia.pngbin5920 -> 4949 bytes
-rw-r--r--pics/crystalsvg/cr64-category-applications-utilities.pngbin5104 -> 4719 bytes
-rw-r--r--pics/wallpapers/Trinity4.pngbin69603 -> 51505 bytes
-rw-r--r--pics/wallpapers/andes-venezolanos.pngbin417194 -> 387407 bytes
-rw-r--r--pics/wallpapers/aurora.pngbin765443 -> 641148 bytes
-rw-r--r--pics/wallpapers/celtic.pngbin241873 -> 217808 bytes
-rw-r--r--pics/wallpapers/globe.pngbin321353 -> 268240 bytes
-rw-r--r--pics/wallpapers/horse-head-nebula.pngbin1186012 -> 1180518 bytes
-rw-r--r--pics/wallpapers/isadora.pngbin744964 -> 710098 bytes
-rw-r--r--pics/wallpapers/konqui.pngbin675307 -> 605250 bytes
-rwxr-xr-xstarttde27
-rw-r--r--tdeioslave/mac/cr16-app-mac.pngbin679 -> 676 bytes
-rw-r--r--tdeioslave/mac/cr32-app-mac.pngbin1342 -> 1131 bytes
-rw-r--r--tdeioslave/media/libmediacommon/mediamanagersettings.kcfg5
-rw-r--r--tdeioslave/media/mediamanager/halbackend.cpp18
-rw-r--r--tdeioslave/media/mediamanager/tdehardwarebackend.cpp88
-rw-r--r--tdeioslave/media/tdecmodule/managermoduleview.ui20
-rw-r--r--tdeioslave/smb/CMakeLists.txt1
-rw-r--r--tdeioslave/smb/ConfigureChecks.cmake2
-rw-r--r--tdeioslave/system/entries/documents.desktop6
-rw-r--r--tdeioslave/trash/CMakeLists.txt19
-rw-r--r--tdeioslave/trash/Makefile.am13
-rw-r--r--tdeioslave/trash/discspaceutil.cpp112
-rw-r--r--tdeioslave/trash/discspaceutil.h81
-rw-r--r--tdeioslave/trash/ktrash.cpp2
-rw-r--r--tdeioslave/trash/ktrashpropsdlgplugin.cpp449
-rw-r--r--tdeioslave/trash/ktrashpropsdlgplugin.desktop7
-rw-r--r--tdeioslave/trash/ktrashpropsdlgplugin.h90
-rw-r--r--tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp7
-rw-r--r--tdeioslave/trash/tdefile-plugin/tdefile_trash.h2
-rw-r--r--tdeioslave/trash/tdeio_trash.cpp2
-rw-r--r--tdeioslave/trash/tdeio_trash.h3
-rw-r--r--tdeioslave/trash/testtrash.cpp4
-rw-r--r--tdeioslave/trash/testtrash.h2
-rw-r--r--tdeioslave/trash/trash.protocol2
-rw-r--r--tdeioslave/trash/trash_constant.h41
-rw-r--r--tdeioslave/trash/trashimpl.cpp102
-rw-r--r--tdeioslave/trash/trashimpl.h7
-rw-r--r--tdekbdledsync/main.cpp26
-rw-r--r--tdepasswd/kcm/pics/Apple.pngbin3749 -> 3666 bytes
-rw-r--r--tdepasswd/kcm/pics/BeachBall.pngbin4104 -> 4104 bytes
-rw-r--r--tdepasswd/kcm/pics/Blowfish.pngbin5031 -> 4823 bytes
-rw-r--r--tdepasswd/kcm/pics/Bug.pngbin4304 -> 4094 bytes
-rw-r--r--tdepasswd/kcm/pics/Butterfly.pngbin4952 -> 4770 bytes
-rw-r--r--tdepasswd/kcm/pics/Car.pngbin4602 -> 4232 bytes
-rw-r--r--tdepasswd/kcm/pics/Cow.pngbin6275 -> 5681 bytes
-rw-r--r--tdepasswd/kcm/pics/Daemon.pngbin5642 -> 5546 bytes
-rw-r--r--tdepasswd/kcm/pics/Dog.pngbin5637 -> 5578 bytes
-rw-r--r--tdepasswd/kcm/pics/Elephant.pngbin6384 -> 5888 bytes
-rw-r--r--tdepasswd/kcm/pics/Flower.pngbin4423 -> 4423 bytes
-rw-r--r--tdepasswd/kcm/pics/Frog.pngbin4511 -> 4511 bytes
-rw-r--r--tdepasswd/kcm/pics/Ghost.pngbin4752 -> 4530 bytes
-rw-r--r--tdepasswd/kcm/pics/Guitar.pngbin4622 -> 4254 bytes
-rw-r--r--tdepasswd/kcm/pics/Heart.pngbin3778 -> 3640 bytes
-rw-r--r--tdepasswd/kcm/pics/Konqui.pngbin5652 -> 5568 bytes
-rw-r--r--tdepasswd/kcm/pics/Lion.pngbin7820 -> 7481 bytes
-rw-r--r--tdepasswd/kcm/pics/Monkey.pngbin5479 -> 5389 bytes
-rw-r--r--tdepasswd/kcm/pics/Penguin.pngbin4829 -> 4593 bytes
-rw-r--r--tdepasswd/kcm/pics/Pig.pngbin6057 -> 5985 bytes
-rw-r--r--tdepasswd/kcm/pics/Rabbit.pngbin4834 -> 4612 bytes
-rw-r--r--tdepasswd/kcm/pics/Ring.pngbin5143 -> 4887 bytes
-rw-r--r--tdepasswd/kcm/pics/Scream.pngbin5543 -> 5420 bytes
-rw-r--r--tdepasswd/kcm/pics/Shark.pngbin4224 -> 4041 bytes
-rw-r--r--tdepasswd/kcm/pics/Splash.pngbin4847 -> 4739 bytes
-rw-r--r--tdepasswd/kcm/pics/Star.pngbin2991 -> 2991 bytes
-rw-r--r--tdepasswd/kcm/pics/Teddybear.pngbin5580 -> 5487 bytes
-rw-r--r--tdepasswd/kcm/pics/Turtle.pngbin5208 -> 5159 bytes
-rw-r--r--tdeprint/kjobviewer/hi128-app-kjobviewer.pngbin8472 -> 7829 bytes
-rw-r--r--tdeprint/kjobviewer/hi16-app-kjobviewer.pngbin684 -> 664 bytes
-rw-r--r--tdeprint/kjobviewer/hi22-app-kjobviewer.pngbin1003 -> 958 bytes
-rw-r--r--tdeprint/kjobviewer/hi32-app-kjobviewer.pngbin1633 -> 1618 bytes
-rw-r--r--tdeprint/kjobviewer/hi48-app-kjobviewer.pngbin2588 -> 2575 bytes
-rw-r--r--tdeprint/kjobviewer/hi64-app-kjobviewer.pngbin3720 -> 3525 bytes
-rw-r--r--tdeprint/printmgr/hi128-app-printmgr.pngbin8472 -> 7829 bytes
-rw-r--r--tdeprint/printmgr/hi16-app-printmgr.pngbin684 -> 664 bytes
-rw-r--r--tdeprint/printmgr/hi22-app-printmgr.pngbin1003 -> 958 bytes
-rw-r--r--tdeprint/printmgr/hi32-app-printmgr.pngbin1633 -> 1618 bytes
-rw-r--r--tdeprint/printmgr/hi48-app-printmgr.pngbin2588 -> 2575 bytes
-rw-r--r--tdeprint/printmgr/hi64-app-printmgr.pngbin3720 -> 3525 bytes
-rw-r--r--tdeprint/slave/templates/bar-bottom-left.pngbin369 -> 356 bytes
-rw-r--r--tdeprint/slave/templates/bar-bottom-middle.pngbin160 -> 149 bytes
-rw-r--r--tdeprint/slave/templates/bar-middle-left.pngbin126 -> 124 bytes
-rw-r--r--tdeprint/slave/templates/bar-middle-right.pngbin141 -> 139 bytes
-rw-r--r--tdeprint/slave/templates/bar-top-middle.pngbin145 -> 140 bytes
-rw-r--r--tdeprint/slave/templates/bar-top-right.pngbin359 -> 339 bytes
-rw-r--r--tdeprint/slave/templates/bottom-left.pngbin665 -> 593 bytes
-rw-r--r--tdeprint/slave/templates/bottom-middle.pngbin174 -> 167 bytes
-rw-r--r--tdeprint/slave/templates/bottom-right.pngbin4922 -> 3654 bytes
-rw-r--r--tdeprint/slave/templates/box-bottom-left.pngbin616 -> 537 bytes
-rw-r--r--tdeprint/slave/templates/box-bottom-middle.pngbin171 -> 165 bytes
-rw-r--r--tdeprint/slave/templates/box-bottom-right.pngbin578 -> 550 bytes
-rw-r--r--tdeprint/slave/templates/box-centre-tdeprint.pngbin9633 -> 5755 bytes
-rw-r--r--tdeprint/slave/templates/box-middle-left.pngbin157 -> 153 bytes
-rw-r--r--tdeprint/slave/templates/box-middle-right.pngbin161 -> 158 bytes
-rw-r--r--tdeprint/slave/templates/box-top-left.pngbin673 -> 619 bytes
-rw-r--r--tdeprint/slave/templates/box-top-middle.pngbin181 -> 172 bytes
-rw-r--r--tdeprint/slave/templates/box-top-right.pngbin679 -> 605 bytes
-rw-r--r--tdeprint/slave/templates/top-left.pngbin10867 -> 10495 bytes
-rw-r--r--tdeprint/slave/templates/top-middle.pngbin233 -> 219 bytes
-rw-r--r--tdeprint/slave/templates/top-right-tdeprint.pngbin13466 -> 10542 bytes
-rw-r--r--tdeprint/tdeprintfax/cr16-action-abentry.pngbin864 -> 864 bytes
-rw-r--r--tdeprint/tdeprintfax/hi128-app-tdeprintfax.pngbin10612 -> 10473 bytes
-rw-r--r--tdeprint/tdeprintfax/hi16-app-tdeprintfax.pngbin787 -> 750 bytes
-rw-r--r--tdeprint/tdeprintfax/hi22-app-tdeprintfax.pngbin1241 -> 1166 bytes
-rw-r--r--tdeprint/tdeprintfax/hi32-app-tdeprintfax.pngbin1928 -> 1748 bytes
-rw-r--r--tdeprint/tdeprintfax/hi48-app-tdeprintfax.pngbin3352 -> 2956 bytes
-rw-r--r--tdeprint/tdeprintfax/hi64-app-tdeprintfax.pngbin4669 -> 4082 bytes
-rw-r--r--tdm/CMakeLists.txt1
-rw-r--r--tdm/backend/client.c51
-rw-r--r--tdm/backend/dm.c173
-rw-r--r--tdm/backend/dpylist.c103
-rw-r--r--tdm/backend/server.c44
-rw-r--r--tdm/backend/session.c4
-rw-r--r--tdm/backend/util.c65
-rw-r--r--tdm/cryptocardwatcher/CMakeLists.txt32
-rw-r--r--tdm/cryptocardwatcher/main.cpp139
-rw-r--r--tdm/cryptocardwatcher/watcher.cc105
-rw-r--r--tdm/cryptocardwatcher/watcher.h40
-rw-r--r--tdm/kfrontend/CMakeLists.txt4
-rw-r--r--tdm/kfrontend/kgapp.cpp45
-rw-r--r--tdm/kfrontend/kgreeter.cpp152
-rw-r--r--tdm/kfrontend/kgreeter.h10
-rw-r--r--tdm/kfrontend/kgverify.cpp282
-rw-r--r--tdm/kfrontend/kgverify.h11
-rw-r--r--tdm/kfrontend/pics/default1.pngbin2622 -> 2014 bytes
-rw-r--r--tdm/kfrontend/pics/default2.pngbin5663 -> 4811 bytes
-rw-r--r--tdm/kfrontend/pics/default3.pngbin4260 -> 4091 bytes
-rw-r--r--tdm/kfrontend/pics/kdelogo.pngbin13450 -> 13438 bytes
-rw-r--r--tdm/kfrontend/pics/root1.pngbin3070 -> 2360 bytes
-rw-r--r--tdm/kfrontend/sakdlg.cc200
-rw-r--r--tdm/kfrontend/sakdlg.h73
-rw-r--r--tdm/kfrontend/sessions/tde.desktop.cmake1
-rw-r--r--tdm/kfrontend/sessions/tde.desktop.in1
-rw-r--r--tdm/kfrontend/tdm_greet.c14
-rw-r--r--tdm/kfrontend/themer/tdmitem.cpp21
-rw-r--r--tdm/kfrontend/themer/tdmitem.h1
-rw-r--r--tdm/kfrontend/themer/tdmlabel.h6
-rw-r--r--tdm/kfrontend/themer/tdmthemer.cpp6
-rw-r--r--tdm/kfrontend/themer/tdmthemer.h1
-rw-r--r--tdm/kfrontend/themes/circles/circles.xml4
-rw-r--r--tdm/kfrontend/themes/circles/flower.pngbin120376 -> 118277 bytes
-rw-r--r--tdm/kfrontend/themes/circles/help.pngbin2138 -> 1599 bytes
-rw-r--r--tdm/kfrontend/themes/circles/options.pngbin2297 -> 1974 bytes
-rw-r--r--tdm/kfrontend/themes/circles/screenshot.pngbin16847 -> 14996 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/background.pngbin466596 -> 465713 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/box.pngbin1566 -> 1295 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/caps-lock-warning.pngbin402 -> 325 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/lineedit.pngbin2308 -> 1814 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/login_normal.pngbin487 -> 444 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/login_prelight.pngbin567 -> 432 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/minimalist.xml4
-rw-r--r--tdm/kfrontend/themes/minimalist/screenshot.pngbin29063 -> 28963 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/session_normal.pngbin1194 -> 873 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/session_prelight.pngbin738 -> 669 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/system_normal.pngbin818 -> 636 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/system_prelight.pngbin607 -> 530 bytes
-rw-r--r--tdm/kfrontend/themes/minimalist/topline.pngbin305 -> 293 bytes
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/Dialog.pngbin4167 -> 4116 bytes
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/enter_normal.pngbin1639 -> 1517 bytes
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/enter_over.pngbin2422 -> 2210 bytes
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/enter_pressed.pngbin1639 -> 1517 bytes
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/enterprise.xml4
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/preview.pngbin381843 -> 360527 bytes
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/system_normal.pngbin1623 -> 1545 bytes
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/system_over.pngbin2491 -> 2389 bytes
-rw-r--r--tdm/kfrontend/themes/o2_enterprise/system_pressed.pngbin1623 -> 1545 bytes
-rw-r--r--tdmlib/CMakeLists.txt4
-rw-r--r--tdmlib/dmctl.cpp88
-rw-r--r--tdmlib/dmctl.h28
-rw-r--r--tdmlib/kgreet_classic.cpp157
-rw-r--r--tdmlib/kgreet_classic.h8
-rw-r--r--tdmlib/kgreet_pam.cpp67
-rw-r--r--tdmlib/kgreet_pam.h5
-rw-r--r--tdmlib/kgreet_winbind.cpp52
-rw-r--r--tdmlib/kgreet_winbind.h5
-rw-r--r--tdmlib/kgreeterplugin.h21
-rw-r--r--tdmlib/tdmtsak.cpp94
-rw-r--r--twin/client.cpp4
-rw-r--r--twin/clients/keramik/pics/border-left.pngbin139 -> 133 bytes
-rw-r--r--twin/clients/keramik/pics/border-right.pngbin142 -> 136 bytes
-rw-r--r--twin/clients/keramik/pics/bottom-center.pngbin149 -> 136 bytes
-rw-r--r--twin/clients/keramik/pics/bottom-left.pngbin158 -> 141 bytes
-rw-r--r--twin/clients/keramik/pics/bottom-right.pngbin160 -> 144 bytes
-rw-r--r--twin/clients/keramik/pics/caption-large-center.pngbin176 -> 173 bytes
-rw-r--r--twin/clients/keramik/pics/caption-large-left.pngbin394 -> 394 bytes
-rw-r--r--twin/clients/keramik/pics/caption-large-right.pngbin498 -> 498 bytes
-rw-r--r--twin/clients/keramik/pics/caption-small-center.pngbin177 -> 175 bytes
-rw-r--r--twin/clients/keramik/pics/caption-small-left.pngbin425 -> 416 bytes
-rw-r--r--twin/clients/keramik/pics/caption-small-right.pngbin504 -> 490 bytes
-rw-r--r--twin/clients/keramik/pics/grabbar-center.pngbin167 -> 153 bytes
-rw-r--r--twin/clients/keramik/pics/grabbar-left.pngbin211 -> 200 bytes
-rw-r--r--twin/clients/keramik/pics/grabbar-right.pngbin208 -> 204 bytes
-rw-r--r--twin/clients/keramik/pics/titlebar-center.pngbin160 -> 157 bytes
-rw-r--r--twin/clients/keramik/pics/titlebar-left.pngbin240 -> 230 bytes
-rw-r--r--twin/clients/keramik/pics/titlebar-right.pngbin288 -> 284 bytes
-rw-r--r--twin/clients/keramik/pics/titlebutton-round-huge.pngbin7868 -> 7659 bytes
-rw-r--r--twin/clients/keramik/pics/titlebutton-round-large.pngbin4380 -> 4304 bytes
-rw-r--r--twin/clients/keramik/pics/titlebutton-round.pngbin1789 -> 1434 bytes
-rw-r--r--twin/clients/keramik/pics/titlebutton-square-huge.pngbin4656 -> 4561 bytes
-rw-r--r--twin/clients/keramik/pics/titlebutton-square-large.pngbin2725 -> 2687 bytes
-rw-r--r--twin/clients/keramik/pics/titlebutton-square.pngbin1082 -> 1064 bytes
-rw-r--r--twin/cr16-app-twin.pngbin696 -> 684 bytes
-rw-r--r--twin/cr32-app-twin.pngbin1653 -> 1627 bytes
-rw-r--r--twin/cr48-app-twin.pngbin2615 -> 2582 bytes
-rw-r--r--twin/pics/bluesun.pngbin2787 -> 1859 bytes
-rw-r--r--twin/pics/close.pngbin306 -> 155 bytes
-rw-r--r--twin/pics/fog-grey.pngbin4608 -> 4058 bytes
-rw-r--r--twin/pics/fog.pngbin8192 -> 6342 bytes
-rw-r--r--twin/pics/greenie.dim.pngbin10027 -> 5701 bytes
-rw-r--r--twin/pics/greenie.light.pngbin11672 -> 5778 bytes
-rw-r--r--twin/pics/iconify.pngbin277 -> 125 bytes
-rw-r--r--twin/pics/maximize.pngbin283 -> 132 bytes
-rw-r--r--twin/pics/maximizedown.pngbin283 -> 132 bytes
-rw-r--r--twin/pics/menu.pngbin278 -> 127 bytes
-rw-r--r--twin/pics/pindown.pngbin322 -> 171 bytes
-rw-r--r--twin/pics/pinup.pngbin320 -> 169 bytes
-rw-r--r--twin/pics/unknown.pngbin708 -> 371 bytes
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
index 751066792..17e22d7c9 100644
--- a/doc/kate/configdialog01.png
+++ b/doc/kate/configdialog01.png
Binary files differ
diff --git a/doc/kate/highlighted.png b/doc/kate/highlighted.png
index ffb95ec48..3b9096f67 100644
--- a/doc/kate/highlighted.png
+++ b/doc/kate/highlighted.png
Binary files differ
diff --git a/doc/kate/kate.png b/doc/kate/kate.png
index dc1ee4c40..c642a6fa3 100644
--- a/doc/kate/kate.png
+++ b/doc/kate/kate.png
Binary files differ
diff --git a/doc/kate/unhighlighted.png b/doc/kate/unhighlighted.png
index 6361032f3..0ecffe1f7 100644
--- a/doc/kate/unhighlighted.png
+++ b/doc/kate/unhighlighted.png
Binary files differ
diff --git a/doc/kcontrol/paths/paths.png b/doc/kcontrol/paths/paths.png
index a9103687f..909281b4f 100644
--- a/doc/kcontrol/paths/paths.png
+++ b/doc/kcontrol/paths/paths.png
Binary files differ
diff --git a/doc/kcontrol/screenshot.png b/doc/kcontrol/screenshot.png
index 3a275cdb3..2caca5020 100644
--- a/doc/kcontrol/screenshot.png
+++ b/doc/kcontrol/screenshot.png
Binary files differ
diff --git a/doc/kcontrol/useraccount/useraccount.png b/doc/kcontrol/useraccount/useraccount.png
index 812313f27..957fd5425 100644
--- a/doc/kcontrol/useraccount/useraccount.png
+++ b/doc/kcontrol/useraccount/useraccount.png
Binary files differ
diff --git a/doc/khelpcenter/background.png b/doc/khelpcenter/background.png
index 2dda48e23..5a16f0297 100644
--- a/doc/khelpcenter/background.png
+++ b/doc/khelpcenter/background.png
Binary files differ
diff --git a/doc/khelpcenter/bgtable.png b/doc/khelpcenter/bgtable.png
index b52f2e6f2..519e933e6 100644
--- a/doc/khelpcenter/bgtable.png
+++ b/doc/khelpcenter/bgtable.png
Binary files differ
diff --git a/doc/khelpcenter/kdelogo2.png b/doc/khelpcenter/kdelogo2.png
index 08f5a1f1d..c64511da7 100644
--- a/doc/khelpcenter/kdelogo2.png
+++ b/doc/khelpcenter/kdelogo2.png
Binary files differ
diff --git a/doc/khelpcenter/khelpcenter.png b/doc/khelpcenter/khelpcenter.png
index e30c35825..ced2da612 100644
--- a/doc/khelpcenter/khelpcenter.png
+++ b/doc/khelpcenter/khelpcenter.png
Binary files differ
diff --git a/doc/khelpcenter/lines.png b/doc/khelpcenter/lines.png
index 498330c38..4a6d5ae85 100644
--- a/doc/khelpcenter/lines.png
+++ b/doc/khelpcenter/lines.png
Binary files differ
diff --git a/doc/khelpcenter/lines2.png b/doc/khelpcenter/lines2.png
index 02a8c05b5..bd0c45b1f 100644
--- a/doc/khelpcenter/lines2.png
+++ b/doc/khelpcenter/lines2.png
Binary files differ
diff --git a/doc/khelpcenter/pointers.png b/doc/khelpcenter/pointers.png
index 17bfb2eb8..8363b5502 100644
--- a/doc/khelpcenter/pointers.png
+++ b/doc/khelpcenter/pointers.png
Binary files differ
diff --git a/doc/khelpcenter/shadow1.png b/doc/khelpcenter/shadow1.png
index b57787697..535cd6e6d 100644
--- a/doc/khelpcenter/shadow1.png
+++ b/doc/khelpcenter/shadow1.png
Binary files differ
diff --git a/doc/kicker/bookmarks_icon.png b/doc/kicker/bookmarks_icon.png
index aa335b286..fcd70dc0b 100644
--- a/doc/kicker/bookmarks_icon.png
+++ b/doc/kicker/bookmarks_icon.png
Binary files differ
diff --git a/doc/kicker/desktop_icon.png b/doc/kicker/desktop_icon.png
index 5055c7df8..ce1104ee5 100644
--- a/doc/kicker/desktop_icon.png
+++ b/doc/kicker/desktop_icon.png
Binary files differ
diff --git a/doc/kicker/k_menu_icon.png b/doc/kicker/k_menu_icon.png
index 17535f876..d9930a366 100644
--- a/doc/kicker/k_menu_icon.png
+++ b/doc/kicker/k_menu_icon.png
Binary files differ
diff --git a/doc/kicker/printsys_icon.png b/doc/kicker/printsys_icon.png
index 13adbd006..9b4410d31 100644
--- a/doc/kicker/printsys_icon.png
+++ b/doc/kicker/printsys_icon.png
Binary files differ
diff --git a/doc/kicker/quickbrowser_icon.png b/doc/kicker/quickbrowser_icon.png
index fbc259e95..8c1ae5c1f 100644
--- a/doc/kicker/quickbrowser_icon.png
+++ b/doc/kicker/quickbrowser_icon.png
Binary files differ
diff --git a/doc/kicker/recent_docs_icon.png b/doc/kicker/recent_docs_icon.png
index 21f079bf4..af6efa104 100644
--- a/doc/kicker/recent_docs_icon.png
+++ b/doc/kicker/recent_docs_icon.png
Binary files differ
diff --git a/doc/kicker/screenshot_left.png b/doc/kicker/screenshot_left.png
index 8b29998ca..ac7dab87c 100644
--- a/doc/kicker/screenshot_left.png
+++ b/doc/kicker/screenshot_left.png
Binary files differ
diff --git a/doc/kicker/screenshot_right.png b/doc/kicker/screenshot_right.png
index b5bcee61c..a8ed04cd6 100644
--- a/doc/kicker/screenshot_right.png
+++ b/doc/kicker/screenshot_right.png
Binary files differ
diff --git a/doc/kicker/taskbar_group.png b/doc/kicker/taskbar_group.png
index e5484fe96..45bf885db 100644
--- a/doc/kicker/taskbar_group.png
+++ b/doc/kicker/taskbar_group.png
Binary files differ
diff --git a/doc/kicker/terminals_icon.png b/doc/kicker/terminals_icon.png
index de458c184..87e977ed6 100644
--- a/doc/kicker/terminals_icon.png
+++ b/doc/kicker/terminals_icon.png
Binary files differ
diff --git a/doc/kicker/windowlist_icon.png b/doc/kicker/windowlist_icon.png
index ca164a12a..f19da6616 100644
--- a/doc/kicker/windowlist_icon.png
+++ b/doc/kicker/windowlist_icon.png
Binary files differ
diff --git a/doc/klipper/screenshot.png b/doc/klipper/screenshot.png
index 2b1fbbafe..ea8c2337c 100644
--- a/doc/klipper/screenshot.png
+++ b/doc/klipper/screenshot.png
Binary files differ
diff --git a/doc/kmenuedit/done.png b/doc/kmenuedit/done.png
index c614475a7..a8f337ed1 100644
--- a/doc/kmenuedit/done.png
+++ b/doc/kmenuedit/done.png
Binary files differ
diff --git a/doc/kmenuedit/itemname.png b/doc/kmenuedit/itemname.png
index fb3d8a286..aff1cac44 100644
--- a/doc/kmenuedit/itemname.png
+++ b/doc/kmenuedit/itemname.png
Binary files differ
diff --git a/doc/kmenuedit/kmenueditmain.png b/doc/kmenuedit/kmenueditmain.png
index 46509372f..3b63eabc0 100644
--- a/doc/kmenuedit/kmenueditmain.png
+++ b/doc/kmenuedit/kmenueditmain.png
Binary files differ
diff --git a/doc/kmenuedit/new.png b/doc/kmenuedit/new.png
index a26a1dd41..dbc35126c 100644
--- a/doc/kmenuedit/new.png
+++ b/doc/kmenuedit/new.png
Binary files differ
diff --git a/doc/kmenuedit/selecticon.png b/doc/kmenuedit/selecticon.png
index c60363f37..8205d5f37 100644
--- a/doc/kmenuedit/selecticon.png
+++ b/doc/kmenuedit/selecticon.png
Binary files differ
diff --git a/doc/kmenuedit/selectinternet.png b/doc/kmenuedit/selectinternet.png
index 92d63b092..6dc323a71 100644
--- a/doc/kmenuedit/selectinternet.png
+++ b/doc/kmenuedit/selectinternet.png
Binary files differ
diff --git a/doc/knetattach/screenshot.png b/doc/knetattach/screenshot.png
index a22996512..a7bd5e272 100644
--- a/doc/knetattach/screenshot.png
+++ b/doc/knetattach/screenshot.png
Binary files differ
diff --git a/doc/knetattach/screenshot1.png b/doc/knetattach/screenshot1.png
index 1a9ef1001..e98cf6c16 100644
--- a/doc/knetattach/screenshot1.png
+++ b/doc/knetattach/screenshot1.png
Binary files differ
diff --git a/doc/knetattach/screenshot2.png b/doc/knetattach/screenshot2.png
index 581fa167c..42a586769 100644
--- a/doc/knetattach/screenshot2.png
+++ b/doc/knetattach/screenshot2.png
Binary files differ
diff --git a/doc/knetattach/screenshot3.png b/doc/knetattach/screenshot3.png
index 668d093e0..2f819b07e 100644
--- a/doc/knetattach/screenshot3.png
+++ b/doc/knetattach/screenshot3.png
Binary files differ
diff --git a/doc/knetattach/screenshot4.png b/doc/knetattach/screenshot4.png
index 13e375a05..1c14a557f 100644
--- a/doc/knetattach/screenshot4.png
+++ b/doc/knetattach/screenshot4.png
Binary files differ
diff --git a/doc/konqueror/cmndline.png b/doc/konqueror/cmndline.png
index 380fead0f..0d6cd433d 100644
--- a/doc/konqueror/cmndline.png
+++ b/doc/konqueror/cmndline.png
Binary files differ
diff --git a/doc/konqueror/dirtree.png b/doc/konqueror/dirtree.png
index fc20b2cc6..7d5539d94 100644
--- a/doc/konqueror/dirtree.png
+++ b/doc/konqueror/dirtree.png
Binary files differ
diff --git a/doc/konqueror/dragdrop.png b/doc/konqueror/dragdrop.png
index 8994a5c89..6afd9f2e5 100644
--- a/doc/konqueror/dragdrop.png
+++ b/doc/konqueror/dragdrop.png
Binary files differ
diff --git a/doc/konqueror/konqorg.png b/doc/konqueror/konqorg.png
index 0812aa045..50bc20aa3 100644
--- a/doc/konqueror/konqorg.png
+++ b/doc/konqueror/konqorg.png
Binary files differ
diff --git a/doc/konqueror/parts.png b/doc/konqueror/parts.png
index 1439d0b89..07b120e96 100644
--- a/doc/konqueror/parts.png
+++ b/doc/konqueror/parts.png
Binary files differ
diff --git a/doc/konqueror/shortcut1.png b/doc/konqueror/shortcut1.png
index 4d7a77c30..c229b9b67 100644
--- a/doc/konqueror/shortcut1.png
+++ b/doc/konqueror/shortcut1.png
Binary files differ
diff --git a/doc/konqueror/shortcut2.png b/doc/konqueror/shortcut2.png
index 7c461b417..a18a78bbc 100644
--- a/doc/konqueror/shortcut2.png
+++ b/doc/konqueror/shortcut2.png
Binary files differ
diff --git a/doc/konsole/konsole.png b/doc/konsole/konsole.png
index 8ec9a1b4e..54174bcbd 100644
--- a/doc/konsole/konsole.png
+++ b/doc/konsole/konsole.png
Binary files differ
diff --git a/doc/konsole/tabbar.png b/doc/konsole/tabbar.png
index fb0fb0dbe..4db0a1c2d 100644
--- a/doc/konsole/tabbar.png
+++ b/doc/konsole/tabbar.png
Binary files differ
diff --git a/doc/kxkb/layout.png b/doc/kxkb/layout.png
index dfb30cbf6..37847358f 100644
--- a/doc/kxkb/layout.png
+++ b/doc/kxkb/layout.png
Binary files differ
diff --git a/doc/kxkb/switching.png b/doc/kxkb/switching.png
index 504eaa7b2..edb3b2de1 100644
--- a/doc/kxkb/switching.png
+++ b/doc/kxkb/switching.png
Binary files differ
diff --git a/doc/kxkb/xkb.png b/doc/kxkb/xkb.png
index df2db58f7..9e26193bc 100644
--- a/doc/kxkb/xkb.png
+++ b/doc/kxkb/xkb.png
Binary files differ
diff --git a/doc/tdefontview/tdefontview.png b/doc/tdefontview/tdefontview.png
index 3f4c8adb3..8d4cc7d41 100644
--- a/doc/tdefontview/tdefontview.png
+++ b/doc/tdefontview/tdefontview.png
Binary files differ
diff --git a/doc/tdeprint/cr32-action-wizard.png b/doc/tdeprint/cr32-action-wizard.png
index b00db2499..210fd6397 100644
--- a/doc/tdeprint/cr32-action-wizard.png
+++ b/doc/tdeprint/cr32-action-wizard.png
Binary files differ
diff --git a/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png b/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png
index 9f5a73d39..74e9ec4c1 100644
--- a/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png
+++ b/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png
Binary files differ
diff --git a/doc/tdeprint/cupsaddprinterwizard1.png b/doc/tdeprint/cupsaddprinterwizard1.png
index cf20e087c..45e9adab3 100644
--- a/doc/tdeprint/cupsaddprinterwizard1.png
+++ b/doc/tdeprint/cupsaddprinterwizard1.png
Binary files differ
diff --git a/doc/tdeprint/cupsaddprinterwizard2_backendselection.png b/doc/tdeprint/cupsaddprinterwizard2_backendselection.png
index 3e4b2f126..fcbae3003 100644
--- a/doc/tdeprint/cupsaddprinterwizard2_backendselection.png
+++ b/doc/tdeprint/cupsaddprinterwizard2_backendselection.png
Binary files differ
diff --git a/doc/tdeprint/cupsaddprinterwizard3_networkscan.png b/doc/tdeprint/cupsaddprinterwizard3_networkscan.png
index 160834ee9..6373b38d4 100644
--- a/doc/tdeprint/cupsaddprinterwizard3_networkscan.png
+++ b/doc/tdeprint/cupsaddprinterwizard3_networkscan.png
Binary files differ
diff --git a/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png b/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png
index aa6cd87f1..fa4ca0381 100644
--- a/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png
+++ b/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png
Binary files differ
diff --git a/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png b/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png
index 7fff7de52..2eaea560f 100644
--- a/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png
+++ b/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png b/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png
index 391cf06ee..64f78c289 100644
--- a/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png
+++ b/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png b/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png
index f5767faad..331f1f008 100644
--- a/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png
+++ b/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png b/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png
index 3775f4d2a..6b782d20a 100644
--- a/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png
+++ b/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png b/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png
index d3ca6971f..1be8e2e08 100644
--- a/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png
+++ b/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png b/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png
index a662dd117..220ce6e12 100644
--- a/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png
+++ b/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png b/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png
index d9e9528d6..b5474a0c4 100644
--- a/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png
+++ b/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png b/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png
index 0030b4d7c..89f91259a 100644
--- a/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png
+++ b/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png
index fab7bc65b..bdf54ac5d 100644
--- a/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png
+++ b/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png
index 2cc4bf8ae..0ca243687 100644
--- a/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png
+++ b/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png
index cfd09e543..24b706574 100644
--- a/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png
+++ b/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration1_welcome.png b/doc/tdeprint/cupsserverconfiguration1_welcome.png
index 50bd9ba3a..ea3f19a11 100644
--- a/doc/tdeprint/cupsserverconfiguration1_welcome.png
+++ b/doc/tdeprint/cupsserverconfiguration1_welcome.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration2_general.png b/doc/tdeprint/cupsserverconfiguration2_general.png
index c8e8b01c0..09d469769 100644
--- a/doc/tdeprint/cupsserverconfiguration2_general.png
+++ b/doc/tdeprint/cupsserverconfiguration2_general.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration3_logging.png b/doc/tdeprint/cupsserverconfiguration3_logging.png
index 300c31943..5a634cda0 100644
--- a/doc/tdeprint/cupsserverconfiguration3_logging.png
+++ b/doc/tdeprint/cupsserverconfiguration3_logging.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration4_directories.png b/doc/tdeprint/cupsserverconfiguration4_directories.png
index e55ab35fc..983c1764d 100644
--- a/doc/tdeprint/cupsserverconfiguration4_directories.png
+++ b/doc/tdeprint/cupsserverconfiguration4_directories.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration5_HTTP.png b/doc/tdeprint/cupsserverconfiguration5_HTTP.png
index 3e46eb17b..f52a9a3fd 100644
--- a/doc/tdeprint/cupsserverconfiguration5_HTTP.png
+++ b/doc/tdeprint/cupsserverconfiguration5_HTTP.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration6_encryption.png b/doc/tdeprint/cupsserverconfiguration6_encryption.png
index aca75adf0..85f380a0b 100644
--- a/doc/tdeprint/cupsserverconfiguration6_encryption.png
+++ b/doc/tdeprint/cupsserverconfiguration6_encryption.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration7_miscellanious.png b/doc/tdeprint/cupsserverconfiguration7_miscellanious.png
index 6a30d103e..0a493d79d 100644
--- a/doc/tdeprint/cupsserverconfiguration7_miscellanious.png
+++ b/doc/tdeprint/cupsserverconfiguration7_miscellanious.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png b/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png
index a0a40da20..116c1c16f 100644
--- a/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png
+++ b/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration9_networkclients.png b/doc/tdeprint/cupsserverconfiguration9_networkclients.png
index 89b30dfe9..028dfe117 100644
--- a/doc/tdeprint/cupsserverconfiguration9_networkclients.png
+++ b/doc/tdeprint/cupsserverconfiguration9_networkclients.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png
index 147830184..31e65fb21 100644
--- a/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png
+++ b/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png
index 295a0970a..8cfe3e425 100644
--- a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png
+++ b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png
index 3b3b4eb04..b01138a6e 100644
--- a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png
+++ b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png b/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png
index 1b388a6cb..f0a1f45b2 100644
--- a/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png
+++ b/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png
Binary files differ
diff --git a/doc/tdeprint/cupsserverconfiguration_securityoverview.png b/doc/tdeprint/cupsserverconfiguration_securityoverview.png
index bed1d3df6..b8f3c8958 100644
--- a/doc/tdeprint/cupsserverconfiguration_securityoverview.png
+++ b/doc/tdeprint/cupsserverconfiguration_securityoverview.png
Binary files differ
diff --git a/doc/tdeprint/kcontrol-icon.png b/doc/tdeprint/kcontrol-icon.png
index 8fbaacd79..47dae8e8f 100644
--- a/doc/tdeprint/kcontrol-icon.png
+++ b/doc/tdeprint/kcontrol-icon.png
Binary files differ
diff --git a/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png b/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png
index d7132b1cd..98b05d0de 100644
--- a/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png
+++ b/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png
Binary files differ
diff --git a/doc/tdeprint/kcron_to_be_printed.png b/doc/tdeprint/kcron_to_be_printed.png
index 114b26b3c..2a1c24cde 100644
--- a/doc/tdeprint/kcron_to_be_printed.png
+++ b/doc/tdeprint/kcron_to_be_printed.png
Binary files differ
diff --git a/doc/tdeprint/kprinter-as-netscape-printcommand.png b/doc/tdeprint/kprinter-as-netscape-printcommand.png
index 0780e2a80..b79d6194b 100644
--- a/doc/tdeprint/kprinter-as-netscape-printcommand.png
+++ b/doc/tdeprint/kprinter-as-netscape-printcommand.png
Binary files differ
diff --git a/doc/tdeprint/kprinter-kivio.png b/doc/tdeprint/kprinter-kivio.png
index b36b49b89..252c4ad97 100644
--- a/doc/tdeprint/kprinter-kivio.png
+++ b/doc/tdeprint/kprinter-kivio.png
Binary files differ
diff --git a/doc/tdeprint/kprinter.png b/doc/tdeprint/kprinter.png
index f83cfcd4b..e23b14ad4 100644
--- a/doc/tdeprint/kprinter.png
+++ b/doc/tdeprint/kprinter.png
Binary files differ
diff --git a/doc/tdeprint/kprinter_called_from_run_command.png b/doc/tdeprint/kprinter_called_from_run_command.png
index b02070c1d..c9921650c 100644
--- a/doc/tdeprint/kprinter_called_from_run_command.png
+++ b/doc/tdeprint/kprinter_called_from_run_command.png
Binary files differ
diff --git a/doc/tdeprint/kprinter_with_kcron_developer_special.png b/doc/tdeprint/kprinter_with_kcron_developer_special.png
index dc9b785cf..e8cd1dea2 100644
--- a/doc/tdeprint/kprinter_with_kcron_developer_special.png
+++ b/doc/tdeprint/kprinter_with_kcron_developer_special.png
Binary files differ
diff --git a/doc/tdeprint/ps-boxes.png b/doc/tdeprint/ps-boxes.png
index a24f845a7..cb4ea3839 100644
--- a/doc/tdeprint/ps-boxes.png
+++ b/doc/tdeprint/ps-boxes.png
Binary files differ
diff --git a/doc/tdeprint/steinbruch_scaled.png b/doc/tdeprint/steinbruch_scaled.png
index 57e6fde76..6c8003ecb 100644
--- a/doc/tdeprint/steinbruch_scaled.png
+++ b/doc/tdeprint/steinbruch_scaled.png
Binary files differ
diff --git a/doc/tdeprint/tdeprint-jobviewer.png b/doc/tdeprint/tdeprint-jobviewer.png
index 8182e4317..1c8b0bb71 100644
--- a/doc/tdeprint/tdeprint-jobviewer.png
+++ b/doc/tdeprint/tdeprint-jobviewer.png
Binary files differ
diff --git a/doc/tdm/tsak.png b/doc/tdm/tsak.png
index 0ccc3a34a..d4891818c 100644
--- a/doc/tdm/tsak.png
+++ b/doc/tdm/tsak.png
Binary files differ
diff --git a/doc/userguide/a-window.png b/doc/userguide/a-window.png
index 4008da52a..cfd93ddb4 100644
--- a/doc/userguide/a-window.png
+++ b/doc/userguide/a-window.png
Binary files differ
diff --git a/doc/userguide/amarok-icon.png b/doc/userguide/amarok-icon.png
index 07968313a..3a4191fe3 100644
--- a/doc/userguide/amarok-icon.png
+++ b/doc/userguide/amarok-icon.png
Binary files differ
diff --git a/doc/userguide/amarok.png b/doc/userguide/amarok.png
index ddcb285bc..1affe7f29 100644
--- a/doc/userguide/amarok.png
+++ b/doc/userguide/amarok.png
Binary files differ
diff --git a/doc/userguide/desktop.png b/doc/userguide/desktop.png
index a7c258675..c9e03af97 100644
--- a/doc/userguide/desktop.png
+++ b/doc/userguide/desktop.png
Binary files differ
diff --git a/doc/userguide/juk-icon.png b/doc/userguide/juk-icon.png
index 2b58a33d3..a9b9150aa 100644
--- a/doc/userguide/juk-icon.png
+++ b/doc/userguide/juk-icon.png
Binary files differ
diff --git a/doc/userguide/juk.png b/doc/userguide/juk.png
index 9ec3ae91e..3c5517cb8 100644
--- a/doc/userguide/juk.png
+++ b/doc/userguide/juk.png
Binary files differ
diff --git a/doc/userguide/kaboodle-icon.png b/doc/userguide/kaboodle-icon.png
index 87ac58b8c..7737031df 100644
--- a/doc/userguide/kaboodle-icon.png
+++ b/doc/userguide/kaboodle-icon.png
Binary files differ
diff --git a/doc/userguide/kaboodle.png b/doc/userguide/kaboodle.png
index dbbcfd923..ca64fee01 100644
--- a/doc/userguide/kaboodle.png
+++ b/doc/userguide/kaboodle.png
Binary files differ
diff --git a/doc/userguide/kcalc-systray.png b/doc/userguide/kcalc-systray.png
index 5e0ac5cc5..c36073d3c 100644
--- a/doc/userguide/kcalc-systray.png
+++ b/doc/userguide/kcalc-systray.png
Binary files differ
diff --git a/doc/userguide/kcontrol.png b/doc/userguide/kcontrol.png
index 3de78f3f8..d09af9aef 100644
--- a/doc/userguide/kcontrol.png
+++ b/doc/userguide/kcontrol.png
Binary files differ
diff --git a/doc/userguide/kmag.png b/doc/userguide/kmag.png
index cba958528..0b9de2399 100644
--- a/doc/userguide/kmag.png
+++ b/doc/userguide/kmag.png
Binary files differ
diff --git a/doc/userguide/kmousetool.png b/doc/userguide/kmousetool.png
index 371f041ae..fe5dfb6a2 100644
--- a/doc/userguide/kmousetool.png
+++ b/doc/userguide/kmousetool.png
Binary files differ
diff --git a/doc/userguide/kmouth.png b/doc/userguide/kmouth.png
index c5507eaba..ebc59d291 100644
--- a/doc/userguide/kmouth.png
+++ b/doc/userguide/kmouth.png
Binary files differ
diff --git a/doc/userguide/kmouth2.png b/doc/userguide/kmouth2.png
index 6cf0e613e..3e435b772 100644
--- a/doc/userguide/kmouth2.png
+++ b/doc/userguide/kmouth2.png
Binary files differ
diff --git a/doc/userguide/kmouth3.png b/doc/userguide/kmouth3.png
index 8bed5a532..63a52ef65 100644
--- a/doc/userguide/kmouth3.png
+++ b/doc/userguide/kmouth3.png
Binary files differ
diff --git a/doc/userguide/knode-identity.png b/doc/userguide/knode-identity.png
index c9f63347f..7039f440a 100644
--- a/doc/userguide/knode-identity.png
+++ b/doc/userguide/knode-identity.png
Binary files differ
diff --git a/doc/userguide/knode-mail-account.png b/doc/userguide/knode-mail-account.png
index f2271662f..d8dc560a2 100644
--- a/doc/userguide/knode-mail-account.png
+++ b/doc/userguide/knode-mail-account.png
Binary files differ
diff --git a/doc/userguide/knode-news-account.png b/doc/userguide/knode-news-account.png
index e046870f1..66eb4adec 100644
--- a/doc/userguide/knode-news-account.png
+++ b/doc/userguide/knode-news-account.png
Binary files differ
diff --git a/doc/userguide/knode-start.png b/doc/userguide/knode-start.png
index 1057f946b..709978a9c 100644
--- a/doc/userguide/knode-start.png
+++ b/doc/userguide/knode-start.png
Binary files differ
diff --git a/doc/userguide/konq-sidebar.png b/doc/userguide/konq-sidebar.png
index ee099be67..d58cdda3b 100644
--- a/doc/userguide/konq-sidebar.png
+++ b/doc/userguide/konq-sidebar.png
Binary files differ
diff --git a/doc/userguide/konq-simple.png b/doc/userguide/konq-simple.png
index 6a1c0fa63..b2f40fda8 100644
--- a/doc/userguide/konq-simple.png
+++ b/doc/userguide/konq-simple.png
Binary files differ
diff --git a/doc/userguide/kopete.png b/doc/userguide/kopete.png
index 446a26655..6d1fb850b 100644
--- a/doc/userguide/kopete.png
+++ b/doc/userguide/kopete.png
Binary files differ
diff --git a/doc/userguide/kppp-dialer-tab.png b/doc/userguide/kppp-dialer-tab.png
index bb344979f..174248710 100644
--- a/doc/userguide/kppp-dialer-tab.png
+++ b/doc/userguide/kppp-dialer-tab.png
Binary files differ
diff --git a/doc/userguide/kppp-wizard.png b/doc/userguide/kppp-wizard.png
index cbb731fcb..5e720df9a 100644
--- a/doc/userguide/kppp-wizard.png
+++ b/doc/userguide/kppp-wizard.png
Binary files differ
diff --git a/doc/userguide/noatun-icon.png b/doc/userguide/noatun-icon.png
index c440d0924..15131ce39 100644
--- a/doc/userguide/noatun-icon.png
+++ b/doc/userguide/noatun-icon.png
Binary files differ
diff --git a/doc/userguide/noatun.png b/doc/userguide/noatun.png
index 2f807e715..9d0d2d764 100644
--- a/doc/userguide/noatun.png
+++ b/doc/userguide/noatun.png
Binary files differ
diff --git a/doc/userguide/oggfolder.png b/doc/userguide/oggfolder.png
index ac1527c32..130fc63b7 100644
--- a/doc/userguide/oggfolder.png
+++ b/doc/userguide/oggfolder.png
Binary files differ
diff --git a/doc/userguide/open-file-dialog.png b/doc/userguide/open-file-dialog.png
index 38378aa0c..2ebd2b254 100644
--- a/doc/userguide/open-file-dialog.png
+++ b/doc/userguide/open-file-dialog.png
Binary files differ
diff --git a/doc/userguide/rip.png b/doc/userguide/rip.png
index 0a044efb9..b1461a979 100644
--- a/doc/userguide/rip.png
+++ b/doc/userguide/rip.png
Binary files differ
diff --git a/doc/userguide/ripsettings.png b/doc/userguide/ripsettings.png
index 21f53fbfd..e4e50addb 100644
--- a/doc/userguide/ripsettings.png
+++ b/doc/userguide/ripsettings.png
Binary files differ
diff --git a/doc/userguide/services.png b/doc/userguide/services.png
index d281c88b7..7ccd315d4 100644
--- a/doc/userguide/services.png
+++ b/doc/userguide/services.png
Binary files differ
diff --git a/doc/userguide/splash-screen.png b/doc/userguide/splash-screen.png
index 048b1e460..cd11c5d35 100644
--- a/doc/userguide/splash-screen.png
+++ b/doc/userguide/splash-screen.png
Binary files differ
diff --git a/doc/userguide/tdm.png b/doc/userguide/tdm.png
index c189ec780..1ad4fcce0 100644
--- a/doc/userguide/tdm.png
+++ b/doc/userguide/tdm.png
Binary files differ
diff --git a/doc/userguide/titlebar-menu.png b/doc/userguide/titlebar-menu.png
index 8f24d9580..d772e7995 100644
--- a/doc/userguide/titlebar-menu.png
+++ b/doc/userguide/titlebar-menu.png
Binary files differ
diff --git a/doc/visualdict/pict1.png b/doc/visualdict/pict1.png
index de9cf8695..2a0d11097 100644
--- a/doc/visualdict/pict1.png
+++ b/doc/visualdict/pict1.png
Binary files differ
diff --git a/doc/visualdict/pict10.png b/doc/visualdict/pict10.png
index 4d526ca74..ff0748ac7 100644
--- a/doc/visualdict/pict10.png
+++ b/doc/visualdict/pict10.png
Binary files differ
diff --git a/doc/visualdict/pict11.png b/doc/visualdict/pict11.png
index 5968a7a2d..e2b33ea3d 100644
--- a/doc/visualdict/pict11.png
+++ b/doc/visualdict/pict11.png
Binary files differ
diff --git a/doc/visualdict/pict12.png b/doc/visualdict/pict12.png
index 49643c607..69e958c00 100644
--- a/doc/visualdict/pict12.png
+++ b/doc/visualdict/pict12.png
Binary files differ
diff --git a/doc/visualdict/pict13.png b/doc/visualdict/pict13.png
index 26a615502..f70b40a75 100644
--- a/doc/visualdict/pict13.png
+++ b/doc/visualdict/pict13.png
Binary files differ
diff --git a/doc/visualdict/pict14.png b/doc/visualdict/pict14.png
index 1f32bfe83..491505064 100644
--- a/doc/visualdict/pict14.png
+++ b/doc/visualdict/pict14.png
Binary files differ
diff --git a/doc/visualdict/pict15.png b/doc/visualdict/pict15.png
index 6fc7a5ca2..81deaace4 100644
--- a/doc/visualdict/pict15.png
+++ b/doc/visualdict/pict15.png
Binary files differ
diff --git a/doc/visualdict/pict16.png b/doc/visualdict/pict16.png
index c5692e751..acb85b32c 100644
--- a/doc/visualdict/pict16.png
+++ b/doc/visualdict/pict16.png
Binary files differ
diff --git a/doc/visualdict/pict17.png b/doc/visualdict/pict17.png
index a49a9a271..c5bfab766 100644
--- a/doc/visualdict/pict17.png
+++ b/doc/visualdict/pict17.png
Binary files differ
diff --git a/doc/visualdict/pict18.png b/doc/visualdict/pict18.png
index 0853ddb52..eb7fc172f 100644
--- a/doc/visualdict/pict18.png
+++ b/doc/visualdict/pict18.png
Binary files differ
diff --git a/doc/visualdict/pict19.png b/doc/visualdict/pict19.png
index e366a3da1..22c841137 100644
--- a/doc/visualdict/pict19.png
+++ b/doc/visualdict/pict19.png
Binary files differ
diff --git a/doc/visualdict/pict2.png b/doc/visualdict/pict2.png
index 87724f8ea..69c64624a 100644
--- a/doc/visualdict/pict2.png
+++ b/doc/visualdict/pict2.png
Binary files differ
diff --git a/doc/visualdict/pict20.png b/doc/visualdict/pict20.png
index 82c4a738e..fac840877 100644
--- a/doc/visualdict/pict20.png
+++ b/doc/visualdict/pict20.png
Binary files differ
diff --git a/doc/visualdict/pict21.png b/doc/visualdict/pict21.png
index 573c7a2a0..70f148c4e 100644
--- a/doc/visualdict/pict21.png
+++ b/doc/visualdict/pict21.png
Binary files differ
diff --git a/doc/visualdict/pict22.png b/doc/visualdict/pict22.png
index 052be0b83..cc29e0f14 100644
--- a/doc/visualdict/pict22.png
+++ b/doc/visualdict/pict22.png
Binary files differ
diff --git a/doc/visualdict/pict23.png b/doc/visualdict/pict23.png
index 1e09a5787..0d3844382 100644
--- a/doc/visualdict/pict23.png
+++ b/doc/visualdict/pict23.png
Binary files differ
diff --git a/doc/visualdict/pict3.png b/doc/visualdict/pict3.png
index 124986e53..6a053a7ac 100644
--- a/doc/visualdict/pict3.png
+++ b/doc/visualdict/pict3.png
Binary files differ
diff --git a/doc/visualdict/pict4.png b/doc/visualdict/pict4.png
index 498ca7212..88f4b85c4 100644
--- a/doc/visualdict/pict4.png
+++ b/doc/visualdict/pict4.png
Binary files differ
diff --git a/doc/visualdict/pict5.png b/doc/visualdict/pict5.png
index f383ca563..ec4b70f7a 100644
--- a/doc/visualdict/pict5.png
+++ b/doc/visualdict/pict5.png
Binary files differ
diff --git a/doc/visualdict/pict6.png b/doc/visualdict/pict6.png
index 542b2f278..e5e1da4a8 100644
--- a/doc/visualdict/pict6.png
+++ b/doc/visualdict/pict6.png
Binary files differ
diff --git a/doc/visualdict/pict7.png b/doc/visualdict/pict7.png
index 4ed9d6074..bfe63c9e5 100644
--- a/doc/visualdict/pict7.png
+++ b/doc/visualdict/pict7.png
Binary files differ
diff --git a/doc/visualdict/pict8.png b/doc/visualdict/pict8.png
index 6f896ea4b..805b07964 100644
--- a/doc/visualdict/pict8.png
+++ b/doc/visualdict/pict8.png
Binary files differ
diff --git a/doc/visualdict/pict9.png b/doc/visualdict/pict9.png
index 9a4aac405..d8a4be594 100644
--- a/doc/visualdict/pict9.png
+++ b/doc/visualdict/pict9.png
Binary files differ
diff --git a/drkonqi/pics/konqi.png b/drkonqi/pics/konqi.png
index 02e75941e..9c5764c6f 100644
--- a/drkonqi/pics/konqi.png
+++ b/drkonqi/pics/konqi.png
Binary files differ
diff --git a/kappfinder/hi128-app-kappfinder.png b/kappfinder/hi128-app-kappfinder.png
index c0ccc13b3..26bbb53b6 100644
--- a/kappfinder/hi128-app-kappfinder.png
+++ b/kappfinder/hi128-app-kappfinder.png
Binary files differ
diff --git a/kappfinder/hi16-app-kappfinder.png b/kappfinder/hi16-app-kappfinder.png
index 38f2cc76e..6eacf2a7a 100644
--- a/kappfinder/hi16-app-kappfinder.png
+++ b/kappfinder/hi16-app-kappfinder.png
Binary files differ
diff --git a/kappfinder/hi22-app-kappfinder.png b/kappfinder/hi22-app-kappfinder.png
index 82a409e0d..6a6f2559b 100644
--- a/kappfinder/hi22-app-kappfinder.png
+++ b/kappfinder/hi22-app-kappfinder.png
Binary files differ
diff --git a/kappfinder/hi32-app-kappfinder.png b/kappfinder/hi32-app-kappfinder.png
index 8fe3e1a20..590ba87b9 100644
--- a/kappfinder/hi32-app-kappfinder.png
+++ b/kappfinder/hi32-app-kappfinder.png
Binary files differ
diff --git a/kappfinder/hi48-app-kappfinder.png b/kappfinder/hi48-app-kappfinder.png
index ef971fc10..f40858056 100644
--- a/kappfinder/hi48-app-kappfinder.png
+++ b/kappfinder/hi48-app-kappfinder.png
Binary files differ
diff --git a/kappfinder/hi64-app-kappfinder.png b/kappfinder/hi64-app-kappfinder.png
index b1a66176d..349b8ff49 100644
--- a/kappfinder/hi64-app-kappfinder.png
+++ b/kappfinder/hi64-app-kappfinder.png
Binary files differ
diff --git a/kate/pics/actions/cr16-action-curfiledir.png b/kate/pics/actions/cr16-action-curfiledir.png
index 9b85f8c9f..695ad2213 100644
--- a/kate/pics/actions/cr16-action-curfiledir.png
+++ b/kate/pics/actions/cr16-action-curfiledir.png
Binary files differ
diff --git a/kate/pics/actions/cr16-action-highlighting.png b/kate/pics/actions/cr16-action-highlighting.png
index a204bfddf..3bd4f8043 100644
--- a/kate/pics/actions/cr16-action-highlighting.png
+++ b/kate/pics/actions/cr16-action-highlighting.png
Binary files differ
diff --git a/kate/pics/actions/cr16-action-modified.png b/kate/pics/actions/cr16-action-modified.png
index 41b3f4367..c4e7831da 100644
--- a/kate/pics/actions/cr16-action-modified.png
+++ b/kate/pics/actions/cr16-action-modified.png
Binary files differ
diff --git a/kate/pics/actions/cr16-action-modmod.png b/kate/pics/actions/cr16-action-modmod.png
index 888024d07..d0d82f721 100644
--- a/kate/pics/actions/cr16-action-modmod.png
+++ b/kate/pics/actions/cr16-action-modmod.png
Binary files differ
diff --git a/kate/pics/actions/cr16-action-modonhd.png b/kate/pics/actions/cr16-action-modonhd.png
index 4ffdef7f3..22876cdda 100644
--- a/kate/pics/actions/cr16-action-modonhd.png
+++ b/kate/pics/actions/cr16-action-modonhd.png
Binary files differ
diff --git a/kate/pics/actions/cr16-action-null.png b/kate/pics/actions/cr16-action-null.png
index 021451f7f..c06ca5543 100644
--- a/kate/pics/actions/cr16-action-null.png
+++ b/kate/pics/actions/cr16-action-null.png
Binary files differ
diff --git a/kate/pics/actions/cr32-action-highlighting.png b/kate/pics/actions/cr32-action-highlighting.png
index 5c8232f79..6801f9b5d 100644
--- a/kate/pics/actions/cr32-action-highlighting.png
+++ b/kate/pics/actions/cr32-action-highlighting.png
Binary files differ
diff --git a/kate/pics/actions/lo16-action-curfiledir.png b/kate/pics/actions/lo16-action-curfiledir.png
index b68a03b17..189695281 100644
--- a/kate/pics/actions/lo16-action-curfiledir.png
+++ b/kate/pics/actions/lo16-action-curfiledir.png
Binary files differ
diff --git a/kate/pics/actions/lo16-action-indent.png b/kate/pics/actions/lo16-action-indent.png
index ab7ee7593..fa5151758 100644
--- a/kate/pics/actions/lo16-action-indent.png
+++ b/kate/pics/actions/lo16-action-indent.png
Binary files differ
diff --git a/kate/pics/actions/lo16-action-modified.png b/kate/pics/actions/lo16-action-modified.png
index 6edb6969f..84d034557 100644
--- a/kate/pics/actions/lo16-action-modified.png
+++ b/kate/pics/actions/lo16-action-modified.png
Binary files differ
diff --git a/kate/pics/actions/lo16-action-modmod.png b/kate/pics/actions/lo16-action-modmod.png
index 652d87d26..65b5ad428 100644
--- a/kate/pics/actions/lo16-action-modmod.png
+++ b/kate/pics/actions/lo16-action-modmod.png
Binary files differ
diff --git a/kate/pics/actions/lo16-action-modonhd.png b/kate/pics/actions/lo16-action-modonhd.png
index 79e5791c6..ed063e22f 100644
--- a/kate/pics/actions/lo16-action-modonhd.png
+++ b/kate/pics/actions/lo16-action-modonhd.png
Binary files differ
diff --git a/kate/pics/actions/lo16-action-null.png b/kate/pics/actions/lo16-action-null.png
index 021451f7f..c06ca5543 100644
--- a/kate/pics/actions/lo16-action-null.png
+++ b/kate/pics/actions/lo16-action-null.png
Binary files differ
diff --git a/kate/pics/actions/lo16-action-unindent.png b/kate/pics/actions/lo16-action-unindent.png
index 119e76344..ca8b0ef9e 100644
--- a/kate/pics/actions/lo16-action-unindent.png
+++ b/kate/pics/actions/lo16-action-unindent.png
Binary files differ
diff --git a/kate/pics/actions/lo22-action-indent.png b/kate/pics/actions/lo22-action-indent.png
index 8eba60153..472dfaab4 100644
--- a/kate/pics/actions/lo22-action-indent.png
+++ b/kate/pics/actions/lo22-action-indent.png
Binary files differ
diff --git a/kate/pics/actions/lo22-action-unindent.png b/kate/pics/actions/lo22-action-unindent.png
index 26a013d7f..5df8da2d4 100644
--- a/kate/pics/actions/lo22-action-unindent.png
+++ b/kate/pics/actions/lo22-action-unindent.png
Binary files differ
diff --git a/kate/pics/hi128-app-kate.png b/kate/pics/hi128-app-kate.png
index dfa6aec3f..746a83dda 100644
--- a/kate/pics/hi128-app-kate.png
+++ b/kate/pics/hi128-app-kate.png
Binary files differ
diff --git a/kate/pics/hi128-app-kwrite.png b/kate/pics/hi128-app-kwrite.png
index fd4db26dc..cbf02bda7 100644
--- a/kate/pics/hi128-app-kwrite.png
+++ b/kate/pics/hi128-app-kwrite.png
Binary files differ
diff --git a/kate/pics/hi16-app-kate.png b/kate/pics/hi16-app-kate.png
index 3c939e637..2a70ccd67 100644
--- a/kate/pics/hi16-app-kate.png
+++ b/kate/pics/hi16-app-kate.png
Binary files differ
diff --git a/kate/pics/hi16-app-kwrite.png b/kate/pics/hi16-app-kwrite.png
index 3c939e637..2a70ccd67 100644
--- a/kate/pics/hi16-app-kwrite.png
+++ b/kate/pics/hi16-app-kwrite.png
Binary files differ
diff --git a/kate/pics/hi22-app-kate.png b/kate/pics/hi22-app-kate.png
index 29c225bea..48ac96de9 100644
--- a/kate/pics/hi22-app-kate.png
+++ b/kate/pics/hi22-app-kate.png
Binary files differ
diff --git a/kate/pics/hi22-app-kwrite.png b/kate/pics/hi22-app-kwrite.png
index 29c225bea..48ac96de9 100644
--- a/kate/pics/hi22-app-kwrite.png
+++ b/kate/pics/hi22-app-kwrite.png
Binary files differ
diff --git a/kate/pics/hi32-app-kate.png b/kate/pics/hi32-app-kate.png
index e4185bfe6..64101d840 100644
--- a/kate/pics/hi32-app-kate.png
+++ b/kate/pics/hi32-app-kate.png
Binary files differ
diff --git a/kate/pics/hi32-app-kwrite.png b/kate/pics/hi32-app-kwrite.png
index e4185bfe6..64101d840 100644
--- a/kate/pics/hi32-app-kwrite.png
+++ b/kate/pics/hi32-app-kwrite.png
Binary files differ
diff --git a/kate/pics/hi48-app-kate.png b/kate/pics/hi48-app-kate.png
index 08c72efab..994e81d03 100644
--- a/kate/pics/hi48-app-kate.png
+++ b/kate/pics/hi48-app-kate.png
Binary files differ
diff --git a/kate/pics/hi48-app-kwrite.png b/kate/pics/hi48-app-kwrite.png
index 08c72efab..994e81d03 100644
--- a/kate/pics/hi48-app-kwrite.png
+++ b/kate/pics/hi48-app-kwrite.png
Binary files differ
diff --git a/kate/pics/hi64-app-kate.png b/kate/pics/hi64-app-kate.png
index c553a93c2..378f0931b 100644
--- a/kate/pics/hi64-app-kate.png
+++ b/kate/pics/hi64-app-kate.png
Binary files differ
diff --git a/kate/pics/hi64-app-kwrite.png b/kate/pics/hi64-app-kwrite.png
index c553a93c2..378f0931b 100644
--- a/kate/pics/hi64-app-kwrite.png
+++ b/kate/pics/hi64-app-kwrite.png
Binary files differ
diff --git a/kate/pics/sessionchooser.png b/kate/pics/sessionchooser.png
index b098af19e..85132358c 100644
--- a/kate/pics/sessionchooser.png
+++ b/kate/pics/sessionchooser.png
Binary files differ
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
index ecd86b9e4..6ef8f32b9 100644
--- a/kcontrol/background/pics/monitor.png
+++ b/kcontrol/background/pics/monitor.png
Binary files differ
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
index f193a4c09..510aeb282 100644
--- a/kcontrol/displayconfig/pics/gamma1.4.png
+++ b/kcontrol/displayconfig/pics/gamma1.4.png
Binary files differ
diff --git a/kcontrol/displayconfig/pics/gamma1.6.png b/kcontrol/displayconfig/pics/gamma1.6.png
index 0110dad26..fefb9ac35 100644
--- a/kcontrol/displayconfig/pics/gamma1.6.png
+++ b/kcontrol/displayconfig/pics/gamma1.6.png
Binary files differ
diff --git a/kcontrol/displayconfig/pics/gamma1.8.png b/kcontrol/displayconfig/pics/gamma1.8.png
index 71fc121aa..9195c4cbc 100644
--- a/kcontrol/displayconfig/pics/gamma1.8.png
+++ b/kcontrol/displayconfig/pics/gamma1.8.png
Binary files differ
diff --git a/kcontrol/displayconfig/pics/gamma2.0.png b/kcontrol/displayconfig/pics/gamma2.0.png
index 6a3f72a8f..7d8fa28db 100644
--- a/kcontrol/displayconfig/pics/gamma2.0.png
+++ b/kcontrol/displayconfig/pics/gamma2.0.png
Binary files differ
diff --git a/kcontrol/displayconfig/pics/gamma2.2.png b/kcontrol/displayconfig/pics/gamma2.2.png
index 573a57e70..053704d4f 100644
--- a/kcontrol/displayconfig/pics/gamma2.2.png
+++ b/kcontrol/displayconfig/pics/gamma2.2.png
Binary files differ
diff --git a/kcontrol/displayconfig/pics/gamma2.4.png b/kcontrol/displayconfig/pics/gamma2.4.png
index 88bc32395..dc1f8010a 100644
--- a/kcontrol/displayconfig/pics/gamma2.4.png
+++ b/kcontrol/displayconfig/pics/gamma2.4.png
Binary files differ
diff --git a/kcontrol/energy/pics/energybig.png b/kcontrol/energy/pics/energybig.png
index 1a79fe748..0bf01274d 100644
--- a/kcontrol/energy/pics/energybig.png
+++ b/kcontrol/energy/pics/energybig.png
Binary files differ
diff --git a/kcontrol/energy/pics/lo-energy.png b/kcontrol/energy/pics/lo-energy.png
index 9706644b1..850b4ab00 100644
--- a/kcontrol/energy/pics/lo-energy.png
+++ b/kcontrol/energy/pics/lo-energy.png
Binary files differ
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
index 33bfb6618..58e930a5d 100644
--- a/kcontrol/input/pics/doubleclick_1.png
+++ b/kcontrol/input/pics/doubleclick_1.png
Binary files differ
diff --git a/kcontrol/input/pics/doubleclick_2.png b/kcontrol/input/pics/doubleclick_2.png
index 4f7a9cd5b..2ff96ec6d 100644
--- a/kcontrol/input/pics/doubleclick_2.png
+++ b/kcontrol/input/pics/doubleclick_2.png
Binary files differ
diff --git a/kcontrol/input/pics/mouse_lh.png b/kcontrol/input/pics/mouse_lh.png
index acec7fe85..ce65c7b94 100644
--- a/kcontrol/input/pics/mouse_lh.png
+++ b/kcontrol/input/pics/mouse_lh.png
Binary files differ
diff --git a/kcontrol/input/pics/mouse_rh.png b/kcontrol/input/pics/mouse_rh.png
index de5cd8a86..68324c045 100644
--- a/kcontrol/input/pics/mouse_rh.png
+++ b/kcontrol/input/pics/mouse_rh.png
Binary files differ
diff --git a/kcontrol/kcontrol/about/top-right-kcontrol.png b/kcontrol/kcontrol/about/top-right-kcontrol.png
index a615af44d..8461f07c8 100644
--- a/kcontrol/kcontrol/about/top-right-kcontrol.png
+++ b/kcontrol/kcontrol/about/top-right-kcontrol.png
Binary files differ
diff --git a/kcontrol/kcontrol/cr128-app-kcontrol.png b/kcontrol/kcontrol/cr128-app-kcontrol.png
index 99a89e323..db7c6a6da 100644
--- a/kcontrol/kcontrol/cr128-app-kcontrol.png
+++ b/kcontrol/kcontrol/cr128-app-kcontrol.png
Binary files differ
diff --git a/kcontrol/kcontrol/cr16-app-kcontrol.png b/kcontrol/kcontrol/cr16-app-kcontrol.png
index 64bf8b71d..ea9f091ce 100644
--- a/kcontrol/kcontrol/cr16-app-kcontrol.png
+++ b/kcontrol/kcontrol/cr16-app-kcontrol.png
Binary files differ
diff --git a/kcontrol/kcontrol/cr32-app-kcontrol.png b/kcontrol/kcontrol/cr32-app-kcontrol.png
index 6537ba75e..0d95d9fa8 100644
--- a/kcontrol/kcontrol/cr32-app-kcontrol.png
+++ b/kcontrol/kcontrol/cr32-app-kcontrol.png
Binary files differ
diff --git a/kcontrol/kcontrol/cr48-app-kcontrol.png b/kcontrol/kcontrol/cr48-app-kcontrol.png
index bde85be5f..97d3d3c2d 100644
--- a/kcontrol/kcontrol/cr48-app-kcontrol.png
+++ b/kcontrol/kcontrol/cr48-app-kcontrol.png
Binary files differ
diff --git a/kcontrol/kcontrol/cr64-app-kcontrol.png b/kcontrol/kcontrol/cr64-app-kcontrol.png
index 4d4db5d65..9d5d0bd17 100644
--- a/kcontrol/kcontrol/cr64-app-kcontrol.png
+++ b/kcontrol/kcontrol/cr64-app-kcontrol.png
Binary files differ
diff --git a/kcontrol/knotify/play.png b/kcontrol/knotify/play.png
index e0daeb8c9..abc81b29c 100644
--- a/kcontrol/knotify/play.png
+++ b/kcontrol/knotify/play.png
Binary files differ
diff --git a/kcontrol/konq/onlyone.png b/kcontrol/konq/onlyone.png
index 7033763f3..4b4ad273d 100644
--- a/kcontrol/konq/onlyone.png
+++ b/kcontrol/konq/onlyone.png
Binary files differ
diff --git a/kcontrol/konq/overlapping.png b/kcontrol/konq/overlapping.png
index 145234576..833c893c7 100644
--- a/kcontrol/konq/overlapping.png
+++ b/kcontrol/konq/overlapping.png
Binary files differ
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
index c30be6021..a97c605ef 100644
--- a/kcontrol/krdb/pics/lo-energy.png
+++ b/kcontrol/krdb/pics/lo-energy.png
Binary files differ
diff --git a/kcontrol/krdb/pics/logo.png b/kcontrol/krdb/pics/logo.png
index 126a0032a..65ea9c7d7 100644
--- a/kcontrol/krdb/pics/logo.png
+++ b/kcontrol/krdb/pics/logo.png
Binary files differ
diff --git a/kcontrol/krdb/pics/mini-world.png b/kcontrol/krdb/pics/mini-world.png
index eae412a41..94abeba38 100644
--- a/kcontrol/krdb/pics/mini-world.png
+++ b/kcontrol/krdb/pics/mini-world.png
Binary files differ
diff --git a/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png b/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png
index f91c2521c..01f917cfa 100644
--- a/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png
+++ b/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png b/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png
index d8a33765e..10f62c473 100644
--- a/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png
+++ b/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png b/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png
index f013c23e0..3e325ff16 100644
--- a/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png
+++ b/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png b/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png
index 1cf565b2e..0a1ccf1cf 100644
--- a/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png
+++ b/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png b/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png
index 68599985a..eac818419 100644
--- a/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png
+++ b/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/Keramik/Keramik.preview.png b/kcontrol/krdb/themes/Keramik/Keramik.preview.png
index 8614bb20b..649431e5e 100644
--- a/kcontrol/krdb/themes/Keramik/Keramik.preview.png
+++ b/kcontrol/krdb/themes/Keramik/Keramik.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/Plastik/Plastik.preview.png b/kcontrol/krdb/themes/Plastik/Plastik.preview.png
index a8801c28f..f9ed5329d 100644
--- a/kcontrol/krdb/themes/Plastik/Plastik.preview.png
+++ b/kcontrol/krdb/themes/Plastik/Plastik.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/Platinum/Platinum.preview.png b/kcontrol/krdb/themes/Platinum/Platinum.preview.png
index da45cccb9..0b6215e73 100644
--- a/kcontrol/krdb/themes/Platinum/Platinum.preview.png
+++ b/kcontrol/krdb/themes/Platinum/Platinum.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/Redmond/Redmond.preview.png b/kcontrol/krdb/themes/Redmond/Redmond.preview.png
index 2e180b33d..cea6d9250 100644
--- a/kcontrol/krdb/themes/Redmond/Redmond.preview.png
+++ b/kcontrol/krdb/themes/Redmond/Redmond.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png b/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png
index eee57c71e..bbeb94462 100644
--- a/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png
+++ b/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png b/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png
index d68507d42..f0d673233 100644
--- a/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png
+++ b/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png
Binary files differ
diff --git a/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png b/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png
index 874d10738..9a4953c30 100644
--- a/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png
+++ b/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png
Binary files differ
diff --git a/kcontrol/locale/pics/background.png b/kcontrol/locale/pics/background.png
index d9d64462b..c1511734d 100644
--- a/kcontrol/locale/pics/background.png
+++ b/kcontrol/locale/pics/background.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-access.png b/kcontrol/pics/cr128-app-access.png
index 5405523ea..4aa25a496 100644
--- a/kcontrol/pics/cr128-app-access.png
+++ b/kcontrol/pics/cr128-app-access.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-arts.png b/kcontrol/pics/cr128-app-arts.png
index d22e0e65d..a50216403 100644
--- a/kcontrol/pics/cr128-app-arts.png
+++ b/kcontrol/pics/cr128-app-arts.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-background.png b/kcontrol/pics/cr128-app-background.png
index d18790b09..3aff44a08 100644
--- a/kcontrol/pics/cr128-app-background.png
+++ b/kcontrol/pics/cr128-app-background.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-bell.png b/kcontrol/pics/cr128-app-bell.png
index 530fbf64a..4f5e7d966 100644
--- a/kcontrol/pics/cr128-app-bell.png
+++ b/kcontrol/pics/cr128-app-bell.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-cache.png b/kcontrol/pics/cr128-app-cache.png
index f9261381d..b7e2849f2 100644
--- a/kcontrol/pics/cr128-app-cache.png
+++ b/kcontrol/pics/cr128-app-cache.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-clock.png b/kcontrol/pics/cr128-app-clock.png
index 692b0502e..f68e5ab99 100644
--- a/kcontrol/pics/cr128-app-clock.png
+++ b/kcontrol/pics/cr128-app-clock.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-colors.png b/kcontrol/pics/cr128-app-colors.png
index 2f6bf1640..79661b26a 100644
--- a/kcontrol/pics/cr128-app-colors.png
+++ b/kcontrol/pics/cr128-app-colors.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-date.png b/kcontrol/pics/cr128-app-date.png
index 1e34bb233..6455baabd 100644
--- a/kcontrol/pics/cr128-app-date.png
+++ b/kcontrol/pics/cr128-app-date.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-energy.png b/kcontrol/pics/cr128-app-energy.png
index 4186ee48d..83d31aeae 100644
--- a/kcontrol/pics/cr128-app-energy.png
+++ b/kcontrol/pics/cr128-app-energy.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-energy_star.png b/kcontrol/pics/cr128-app-energy_star.png
index d9460449c..35bd263c7 100644
--- a/kcontrol/pics/cr128-app-energy_star.png
+++ b/kcontrol/pics/cr128-app-energy_star.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-filetypes.png b/kcontrol/pics/cr128-app-filetypes.png
index 144482335..b0576bb2f 100644
--- a/kcontrol/pics/cr128-app-filetypes.png
+++ b/kcontrol/pics/cr128-app-filetypes.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-fonts.png b/kcontrol/pics/cr128-app-fonts.png
index f859e33e7..14f8be7e8 100644
--- a/kcontrol/pics/cr128-app-fonts.png
+++ b/kcontrol/pics/cr128-app-fonts.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-help_index.png b/kcontrol/pics/cr128-app-help_index.png
index 9a1ee3fe5..4552ad675 100644
--- a/kcontrol/pics/cr128-app-help_index.png
+++ b/kcontrol/pics/cr128-app-help_index.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-hwinfo.png b/kcontrol/pics/cr128-app-hwinfo.png
index d7a3052c5..a3959759a 100644
--- a/kcontrol/pics/cr128-app-hwinfo.png
+++ b/kcontrol/pics/cr128-app-hwinfo.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-kcmdevices.png b/kcontrol/pics/cr128-app-kcmdevices.png
index 0dd12a56a..2aab3160b 100644
--- a/kcontrol/pics/cr128-app-kcmdevices.png
+++ b/kcontrol/pics/cr128-app-kcmdevices.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-kcmdf.png b/kcontrol/pics/cr128-app-kcmdf.png
index cbec02996..ab1d996eb 100644
--- a/kcontrol/pics/cr128-app-kcmdf.png
+++ b/kcontrol/pics/cr128-app-kcmdf.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-kcmkwm.png b/kcontrol/pics/cr128-app-kcmkwm.png
index 710167623..e7278ae4d 100644
--- a/kcontrol/pics/cr128-app-kcmkwm.png
+++ b/kcontrol/pics/cr128-app-kcmkwm.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-kcmmemory.png b/kcontrol/pics/cr128-app-kcmmemory.png
index 8088fef9b..fcab66fdf 100644
--- a/kcontrol/pics/cr128-app-kcmmemory.png
+++ b/kcontrol/pics/cr128-app-kcmmemory.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-kcmpartitions.png b/kcontrol/pics/cr128-app-kcmpartitions.png
index 627c52fe7..e9a76dec8 100644
--- a/kcontrol/pics/cr128-app-kcmpartitions.png
+++ b/kcontrol/pics/cr128-app-kcmpartitions.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-kcmpci.png b/kcontrol/pics/cr128-app-kcmpci.png
index efed93129..3d8340ba5 100644
--- a/kcontrol/pics/cr128-app-kcmpci.png
+++ b/kcontrol/pics/cr128-app-kcmpci.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-key_bindings.png b/kcontrol/pics/cr128-app-key_bindings.png
index 4c24fa0e4..cef5d73d9 100644
--- a/kcontrol/pics/cr128-app-key_bindings.png
+++ b/kcontrol/pics/cr128-app-key_bindings.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-kthememgr.png b/kcontrol/pics/cr128-app-kthememgr.png
index 8c496e5d3..040cc1850 100644
--- a/kcontrol/pics/cr128-app-kthememgr.png
+++ b/kcontrol/pics/cr128-app-kthememgr.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-locale.png b/kcontrol/pics/cr128-app-locale.png
index 25403acc9..223d00838 100644
--- a/kcontrol/pics/cr128-app-locale.png
+++ b/kcontrol/pics/cr128-app-locale.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-multimedia.png b/kcontrol/pics/cr128-app-multimedia.png
index 5543818ba..e9a8edf92 100644
--- a/kcontrol/pics/cr128-app-multimedia.png
+++ b/kcontrol/pics/cr128-app-multimedia.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-proxy.png b/kcontrol/pics/cr128-app-proxy.png
index ec18d5a92..30837c888 100644
--- a/kcontrol/pics/cr128-app-proxy.png
+++ b/kcontrol/pics/cr128-app-proxy.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-samba.png b/kcontrol/pics/cr128-app-samba.png
index e4867d188..e8fed2a0f 100644
--- a/kcontrol/pics/cr128-app-samba.png
+++ b/kcontrol/pics/cr128-app-samba.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-stylesheet.png b/kcontrol/pics/cr128-app-stylesheet.png
index bc911a9c9..9c2f2408c 100644
--- a/kcontrol/pics/cr128-app-stylesheet.png
+++ b/kcontrol/pics/cr128-app-stylesheet.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-tdescreensaver.png b/kcontrol/pics/cr128-app-tdescreensaver.png
index e8f036fe3..0384dfb82 100644
--- a/kcontrol/pics/cr128-app-tdescreensaver.png
+++ b/kcontrol/pics/cr128-app-tdescreensaver.png
Binary files differ
diff --git a/kcontrol/pics/cr128-app-tdmconfig.png b/kcontrol/pics/cr128-app-tdmconfig.png
index f28f704f7..3dd4cb1a9 100644
--- a/kcontrol/pics/cr128-app-tdmconfig.png
+++ b/kcontrol/pics/cr128-app-tdmconfig.png
Binary files differ
diff --git a/kcontrol/pics/cr128-category-preferences-desktop-personal.png b/kcontrol/pics/cr128-category-preferences-desktop-personal.png
index 9e033dfcc..c4359f07b 100644
--- a/kcontrol/pics/cr128-category-preferences-desktop-personal.png
+++ b/kcontrol/pics/cr128-category-preferences-desktop-personal.png
Binary files differ
diff --git a/kcontrol/pics/cr128-category-preferences-desktop.png b/kcontrol/pics/cr128-category-preferences-desktop.png
index cd1a36b9a..9eebb8a0b 100644
--- a/kcontrol/pics/cr128-category-preferences-desktop.png
+++ b/kcontrol/pics/cr128-category-preferences-desktop.png
Binary files differ
diff --git a/kcontrol/pics/cr128-device-laptop.png b/kcontrol/pics/cr128-device-laptop.png
index 0fef41bc3..a3378c7a7 100644
--- a/kcontrol/pics/cr128-device-laptop.png
+++ b/kcontrol/pics/cr128-device-laptop.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-access.png b/kcontrol/pics/cr16-app-access.png
index a952d7786..c62db119a 100644
--- a/kcontrol/pics/cr16-app-access.png
+++ b/kcontrol/pics/cr16-app-access.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-agent.png b/kcontrol/pics/cr16-app-agent.png
index 9826d3457..013e21c49 100644
--- a/kcontrol/pics/cr16-app-agent.png
+++ b/kcontrol/pics/cr16-app-agent.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-arts.png b/kcontrol/pics/cr16-app-arts.png
index cc030d391..7716d5347 100644
--- a/kcontrol/pics/cr16-app-arts.png
+++ b/kcontrol/pics/cr16-app-arts.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-background.png b/kcontrol/pics/cr16-app-background.png
index 8645b601b..63a893333 100644
--- a/kcontrol/pics/cr16-app-background.png
+++ b/kcontrol/pics/cr16-app-background.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-bell.png b/kcontrol/pics/cr16-app-bell.png
index 188410853..9dd4cac12 100644
--- a/kcontrol/pics/cr16-app-bell.png
+++ b/kcontrol/pics/cr16-app-bell.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-cache.png b/kcontrol/pics/cr16-app-cache.png
index 9d3f243ab..4b3566714 100644
--- a/kcontrol/pics/cr16-app-cache.png
+++ b/kcontrol/pics/cr16-app-cache.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-clock.png b/kcontrol/pics/cr16-app-clock.png
index dca2c7ef8..799514b91 100644
--- a/kcontrol/pics/cr16-app-clock.png
+++ b/kcontrol/pics/cr16-app-clock.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-colors.png b/kcontrol/pics/cr16-app-colors.png
index c0a67bb90..f7b63e2ec 100644
--- a/kcontrol/pics/cr16-app-colors.png
+++ b/kcontrol/pics/cr16-app-colors.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-cookie.png b/kcontrol/pics/cr16-app-cookie.png
index 16617b9f4..0054f4711 100644
--- a/kcontrol/pics/cr16-app-cookie.png
+++ b/kcontrol/pics/cr16-app-cookie.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-date.png b/kcontrol/pics/cr16-app-date.png
index fbf29f521..6025df129 100644
--- a/kcontrol/pics/cr16-app-date.png
+++ b/kcontrol/pics/cr16-app-date.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-energy.png b/kcontrol/pics/cr16-app-energy.png
index ebad43996..489e7149c 100644
--- a/kcontrol/pics/cr16-app-energy.png
+++ b/kcontrol/pics/cr16-app-energy.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-energy_star.png b/kcontrol/pics/cr16-app-energy_star.png
index 52507f80a..f13297d75 100644
--- a/kcontrol/pics/cr16-app-energy_star.png
+++ b/kcontrol/pics/cr16-app-energy_star.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-enhanced_browsing.png b/kcontrol/pics/cr16-app-enhanced_browsing.png
index d9023041c..822449072 100644
--- a/kcontrol/pics/cr16-app-enhanced_browsing.png
+++ b/kcontrol/pics/cr16-app-enhanced_browsing.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-filetypes.png b/kcontrol/pics/cr16-app-filetypes.png
index e6d7266cf..18d419e99 100644
--- a/kcontrol/pics/cr16-app-filetypes.png
+++ b/kcontrol/pics/cr16-app-filetypes.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-fonts.png b/kcontrol/pics/cr16-app-fonts.png
index 78d71d03a..c9aa86201 100644
--- a/kcontrol/pics/cr16-app-fonts.png
+++ b/kcontrol/pics/cr16-app-fonts.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-help_index.png b/kcontrol/pics/cr16-app-help_index.png
index 1cb23431b..5b9b8c0fc 100644
--- a/kcontrol/pics/cr16-app-help_index.png
+++ b/kcontrol/pics/cr16-app-help_index.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-hwinfo.png b/kcontrol/pics/cr16-app-hwinfo.png
index 99889980d..730057b36 100644
--- a/kcontrol/pics/cr16-app-hwinfo.png
+++ b/kcontrol/pics/cr16-app-hwinfo.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-icons.png b/kcontrol/pics/cr16-app-icons.png
index 10d2a2d63..b3a9c31b7 100644
--- a/kcontrol/pics/cr16-app-icons.png
+++ b/kcontrol/pics/cr16-app-icons.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-iconthemes.png b/kcontrol/pics/cr16-app-iconthemes.png
index 4a9081564..aeedbb31a 100644
--- a/kcontrol/pics/cr16-app-iconthemes.png
+++ b/kcontrol/pics/cr16-app-iconthemes.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-ieee1394.png b/kcontrol/pics/cr16-app-ieee1394.png
index b7cec0007..320a63331 100644
--- a/kcontrol/pics/cr16-app-ieee1394.png
+++ b/kcontrol/pics/cr16-app-ieee1394.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmdevices.png b/kcontrol/pics/cr16-app-kcmdevices.png
index c7c34a1a7..60625e1c8 100644
--- a/kcontrol/pics/cr16-app-kcmdevices.png
+++ b/kcontrol/pics/cr16-app-kcmdevices.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmkicker.png b/kcontrol/pics/cr16-app-kcmkicker.png
index 0d04030fc..2331a29e0 100644
--- a/kcontrol/pics/cr16-app-kcmkicker.png
+++ b/kcontrol/pics/cr16-app-kcmkicker.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmkwm.png b/kcontrol/pics/cr16-app-kcmkwm.png
index 775b96556..6bc50e3b8 100644
--- a/kcontrol/pics/cr16-app-kcmkwm.png
+++ b/kcontrol/pics/cr16-app-kcmkwm.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmmemory.png b/kcontrol/pics/cr16-app-kcmmemory.png
index 6ddeddb68..55f23b7bc 100644
--- a/kcontrol/pics/cr16-app-kcmmemory.png
+++ b/kcontrol/pics/cr16-app-kcmmemory.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmmidi.png b/kcontrol/pics/cr16-app-kcmmidi.png
index 4283b35f3..433e6ebab 100644
--- a/kcontrol/pics/cr16-app-kcmmidi.png
+++ b/kcontrol/pics/cr16-app-kcmmidi.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmpartitions.png b/kcontrol/pics/cr16-app-kcmpartitions.png
index 5b6eb8764..ac33cc6a9 100644
--- a/kcontrol/pics/cr16-app-kcmpartitions.png
+++ b/kcontrol/pics/cr16-app-kcmpartitions.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmpci.png b/kcontrol/pics/cr16-app-kcmpci.png
index 0ac401c6f..f7a607e12 100644
--- a/kcontrol/pics/cr16-app-kcmpci.png
+++ b/kcontrol/pics/cr16-app-kcmpci.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmprocessor.png b/kcontrol/pics/cr16-app-kcmprocessor.png
index b7dc9b4d1..d87670dbc 100644
--- a/kcontrol/pics/cr16-app-kcmprocessor.png
+++ b/kcontrol/pics/cr16-app-kcmprocessor.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmscsi.png b/kcontrol/pics/cr16-app-kcmscsi.png
index 2ac53532a..bfb82fd73 100644
--- a/kcontrol/pics/cr16-app-kcmscsi.png
+++ b/kcontrol/pics/cr16-app-kcmscsi.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmsound.png b/kcontrol/pics/cr16-app-kcmsound.png
index dbf51d203..df9e473ca 100644
--- a/kcontrol/pics/cr16-app-kcmsound.png
+++ b/kcontrol/pics/cr16-app-kcmsound.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kcmx.png b/kcontrol/pics/cr16-app-kcmx.png
index 29ea2da85..d31bb3f68 100644
--- a/kcontrol/pics/cr16-app-kcmx.png
+++ b/kcontrol/pics/cr16-app-kcmx.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-key_bindings.png b/kcontrol/pics/cr16-app-key_bindings.png
index 26266f1b1..151c13213 100644
--- a/kcontrol/pics/cr16-app-key_bindings.png
+++ b/kcontrol/pics/cr16-app-key_bindings.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-keyboard.png b/kcontrol/pics/cr16-app-keyboard.png
index 198d20221..e102dd721 100644
--- a/kcontrol/pics/cr16-app-keyboard.png
+++ b/kcontrol/pics/cr16-app-keyboard.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-keyboard_layout.png b/kcontrol/pics/cr16-app-keyboard_layout.png
index efbbcda82..4d86966ba 100644
--- a/kcontrol/pics/cr16-app-keyboard_layout.png
+++ b/kcontrol/pics/cr16-app-keyboard_layout.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-knotify.png b/kcontrol/pics/cr16-app-knotify.png
index a893d6229..338f9b957 100644
--- a/kcontrol/pics/cr16-app-knotify.png
+++ b/kcontrol/pics/cr16-app-knotify.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-kthememgr.png b/kcontrol/pics/cr16-app-kthememgr.png
index 2b3588a05..91a4faae9 100644
--- a/kcontrol/pics/cr16-app-kthememgr.png
+++ b/kcontrol/pics/cr16-app-kthememgr.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-locale.png b/kcontrol/pics/cr16-app-locale.png
index 0dfece4d3..448a18e65 100644
--- a/kcontrol/pics/cr16-app-locale.png
+++ b/kcontrol/pics/cr16-app-locale.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-multimedia.png b/kcontrol/pics/cr16-app-multimedia.png
index d2bf93a19..91a2281ac 100644
--- a/kcontrol/pics/cr16-app-multimedia.png
+++ b/kcontrol/pics/cr16-app-multimedia.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-panel_settings.png b/kcontrol/pics/cr16-app-panel_settings.png
index e66dd216a..7df91bed1 100644
--- a/kcontrol/pics/cr16-app-panel_settings.png
+++ b/kcontrol/pics/cr16-app-panel_settings.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-proxy.png b/kcontrol/pics/cr16-app-proxy.png
index 69f8bb745..1ca125153 100644
--- a/kcontrol/pics/cr16-app-proxy.png
+++ b/kcontrol/pics/cr16-app-proxy.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-samba.png b/kcontrol/pics/cr16-app-samba.png
index 3d2e6885a..988591c5e 100644
--- a/kcontrol/pics/cr16-app-samba.png
+++ b/kcontrol/pics/cr16-app-samba.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-style.png b/kcontrol/pics/cr16-app-style.png
index b727f8f60..e56f46c3f 100644
--- a/kcontrol/pics/cr16-app-style.png
+++ b/kcontrol/pics/cr16-app-style.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-stylesheet.png b/kcontrol/pics/cr16-app-stylesheet.png
index 6fdea61e2..ce78d34a3 100644
--- a/kcontrol/pics/cr16-app-stylesheet.png
+++ b/kcontrol/pics/cr16-app-stylesheet.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-tdescreensaver.png b/kcontrol/pics/cr16-app-tdescreensaver.png
index 200fe3dcc..39c57ea46 100644
--- a/kcontrol/pics/cr16-app-tdescreensaver.png
+++ b/kcontrol/pics/cr16-app-tdescreensaver.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-tdmconfig.png b/kcontrol/pics/cr16-app-tdmconfig.png
index 8f69e2b99..8f94a3ffc 100644
--- a/kcontrol/pics/cr16-app-tdmconfig.png
+++ b/kcontrol/pics/cr16-app-tdmconfig.png
Binary files differ
diff --git a/kcontrol/pics/cr16-app-usb.png b/kcontrol/pics/cr16-app-usb.png
index b772ba541..b3b25f1fa 100644
--- a/kcontrol/pics/cr16-app-usb.png
+++ b/kcontrol/pics/cr16-app-usb.png
Binary files differ
diff --git a/kcontrol/pics/cr16-category-preferences-desktop-peripherals.png b/kcontrol/pics/cr16-category-preferences-desktop-peripherals.png
index 18b3f92eb..2646c7a18 100644
--- a/kcontrol/pics/cr16-category-preferences-desktop-peripherals.png
+++ b/kcontrol/pics/cr16-category-preferences-desktop-peripherals.png
Binary files differ
diff --git a/kcontrol/pics/cr16-category-preferences-desktop-personal.png b/kcontrol/pics/cr16-category-preferences-desktop-personal.png
index 83e5b318b..6a1402e08 100644
--- a/kcontrol/pics/cr16-category-preferences-desktop-personal.png
+++ b/kcontrol/pics/cr16-category-preferences-desktop-personal.png
Binary files differ
diff --git a/kcontrol/pics/cr16-category-preferences-desktop.png b/kcontrol/pics/cr16-category-preferences-desktop.png
index fb4181004..fd965f4b3 100644
--- a/kcontrol/pics/cr16-category-preferences-desktop.png
+++ b/kcontrol/pics/cr16-category-preferences-desktop.png
Binary files differ
diff --git a/kcontrol/pics/cr16-category-preferences-system.png b/kcontrol/pics/cr16-category-preferences-system.png
index b97bfb434..b41c29633 100644
--- a/kcontrol/pics/cr16-category-preferences-system.png
+++ b/kcontrol/pics/cr16-category-preferences-system.png
Binary files differ
diff --git a/kcontrol/pics/cr16-device-laptop.png b/kcontrol/pics/cr16-device-laptop.png
index 9e221e632..5d5c97795 100644
--- a/kcontrol/pics/cr16-device-laptop.png
+++ b/kcontrol/pics/cr16-device-laptop.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-access.png b/kcontrol/pics/cr22-app-access.png
index ba7027a14..e6c53f3e3 100644
--- a/kcontrol/pics/cr22-app-access.png
+++ b/kcontrol/pics/cr22-app-access.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-arts.png b/kcontrol/pics/cr22-app-arts.png
index 2a1a4ceb0..fc5d462a4 100644
--- a/kcontrol/pics/cr22-app-arts.png
+++ b/kcontrol/pics/cr22-app-arts.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-background.png b/kcontrol/pics/cr22-app-background.png
index 3f742a847..d4eaaaa89 100644
--- a/kcontrol/pics/cr22-app-background.png
+++ b/kcontrol/pics/cr22-app-background.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-bell.png b/kcontrol/pics/cr22-app-bell.png
index f4dd1afd5..2746eefd2 100644
--- a/kcontrol/pics/cr22-app-bell.png
+++ b/kcontrol/pics/cr22-app-bell.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-cache.png b/kcontrol/pics/cr22-app-cache.png
index 509009956..aaa56df55 100644
--- a/kcontrol/pics/cr22-app-cache.png
+++ b/kcontrol/pics/cr22-app-cache.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-colors.png b/kcontrol/pics/cr22-app-colors.png
index 84fb0b922..4d94f4ccf 100644
--- a/kcontrol/pics/cr22-app-colors.png
+++ b/kcontrol/pics/cr22-app-colors.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-cookie.png b/kcontrol/pics/cr22-app-cookie.png
index eb11b7605..c1ec40149 100644
--- a/kcontrol/pics/cr22-app-cookie.png
+++ b/kcontrol/pics/cr22-app-cookie.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-date.png b/kcontrol/pics/cr22-app-date.png
index cb1f8455a..b1638e7f6 100644
--- a/kcontrol/pics/cr22-app-date.png
+++ b/kcontrol/pics/cr22-app-date.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-energy.png b/kcontrol/pics/cr22-app-energy.png
index 2893c77bf..92b5d27cd 100644
--- a/kcontrol/pics/cr22-app-energy.png
+++ b/kcontrol/pics/cr22-app-energy.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-enhanced_browsing.png b/kcontrol/pics/cr22-app-enhanced_browsing.png
index c7281f352..3563acea7 100644
--- a/kcontrol/pics/cr22-app-enhanced_browsing.png
+++ b/kcontrol/pics/cr22-app-enhanced_browsing.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-filetypes.png b/kcontrol/pics/cr22-app-filetypes.png
index 71e4ae8a2..72b185590 100644
--- a/kcontrol/pics/cr22-app-filetypes.png
+++ b/kcontrol/pics/cr22-app-filetypes.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-fonts.png b/kcontrol/pics/cr22-app-fonts.png
index 19fccc6c5..247a04d15 100644
--- a/kcontrol/pics/cr22-app-fonts.png
+++ b/kcontrol/pics/cr22-app-fonts.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-hwinfo.png b/kcontrol/pics/cr22-app-hwinfo.png
index 9eb787ef2..95779f68e 100644
--- a/kcontrol/pics/cr22-app-hwinfo.png
+++ b/kcontrol/pics/cr22-app-hwinfo.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-ieee1394.png b/kcontrol/pics/cr22-app-ieee1394.png
index 184c283bf..e582ea87d 100644
--- a/kcontrol/pics/cr22-app-ieee1394.png
+++ b/kcontrol/pics/cr22-app-ieee1394.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-kcmdevices.png b/kcontrol/pics/cr22-app-kcmdevices.png
index 49d63884d..7fe37589a 100644
--- a/kcontrol/pics/cr22-app-kcmdevices.png
+++ b/kcontrol/pics/cr22-app-kcmdevices.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-kcmkicker.png b/kcontrol/pics/cr22-app-kcmkicker.png
index 0901b7460..dbfa1e548 100644
--- a/kcontrol/pics/cr22-app-kcmkicker.png
+++ b/kcontrol/pics/cr22-app-kcmkicker.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-kcmkwm.png b/kcontrol/pics/cr22-app-kcmkwm.png
index b6c17916a..cd0271118 100644
--- a/kcontrol/pics/cr22-app-kcmkwm.png
+++ b/kcontrol/pics/cr22-app-kcmkwm.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-kcmx.png b/kcontrol/pics/cr22-app-kcmx.png
index fdab29916..9e04133c4 100644
--- a/kcontrol/pics/cr22-app-kcmx.png
+++ b/kcontrol/pics/cr22-app-kcmx.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-key_bindings.png b/kcontrol/pics/cr22-app-key_bindings.png
index 732f4d9c1..a1caf143d 100644
--- a/kcontrol/pics/cr22-app-key_bindings.png
+++ b/kcontrol/pics/cr22-app-key_bindings.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-keyboard.png b/kcontrol/pics/cr22-app-keyboard.png
index 4360481af..e54f4b367 100644
--- a/kcontrol/pics/cr22-app-keyboard.png
+++ b/kcontrol/pics/cr22-app-keyboard.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-locale.png b/kcontrol/pics/cr22-app-locale.png
index 827360a8b..452769ee6 100644
--- a/kcontrol/pics/cr22-app-locale.png
+++ b/kcontrol/pics/cr22-app-locale.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-proxy.png b/kcontrol/pics/cr22-app-proxy.png
index e8fef4233..58ec7917b 100644
--- a/kcontrol/pics/cr22-app-proxy.png
+++ b/kcontrol/pics/cr22-app-proxy.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-samba.png b/kcontrol/pics/cr22-app-samba.png
index 32b5972e9..905e399c5 100644
--- a/kcontrol/pics/cr22-app-samba.png
+++ b/kcontrol/pics/cr22-app-samba.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-stylesheet.png b/kcontrol/pics/cr22-app-stylesheet.png
index 625688457..a0ed2772f 100644
--- a/kcontrol/pics/cr22-app-stylesheet.png
+++ b/kcontrol/pics/cr22-app-stylesheet.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-tdescreensaver.png b/kcontrol/pics/cr22-app-tdescreensaver.png
index 7448fe237..63a349a78 100644
--- a/kcontrol/pics/cr22-app-tdescreensaver.png
+++ b/kcontrol/pics/cr22-app-tdescreensaver.png
Binary files differ
diff --git a/kcontrol/pics/cr22-app-tdmconfig.png b/kcontrol/pics/cr22-app-tdmconfig.png
index 399978a99..00e42ac3e 100644
--- a/kcontrol/pics/cr22-app-tdmconfig.png
+++ b/kcontrol/pics/cr22-app-tdmconfig.png
Binary files differ
diff --git a/kcontrol/pics/cr22-category-preferences-desktop-personal.png b/kcontrol/pics/cr22-category-preferences-desktop-personal.png
index 6b7153767..d805d03e4 100644
--- a/kcontrol/pics/cr22-category-preferences-desktop-personal.png
+++ b/kcontrol/pics/cr22-category-preferences-desktop-personal.png
Binary files differ
diff --git a/kcontrol/pics/cr22-device-laptop.png b/kcontrol/pics/cr22-device-laptop.png
index db7f61e89..e6520ce99 100644
--- a/kcontrol/pics/cr22-device-laptop.png
+++ b/kcontrol/pics/cr22-device-laptop.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-access.png b/kcontrol/pics/cr32-app-access.png
index c83070ca3..3e60c4be5 100644
--- a/kcontrol/pics/cr32-app-access.png
+++ b/kcontrol/pics/cr32-app-access.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-agent.png b/kcontrol/pics/cr32-app-agent.png
index d10a80c61..1a832620a 100644
--- a/kcontrol/pics/cr32-app-agent.png
+++ b/kcontrol/pics/cr32-app-agent.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-arts.png b/kcontrol/pics/cr32-app-arts.png
index 378cce9a6..eba7e5477 100644
--- a/kcontrol/pics/cr32-app-arts.png
+++ b/kcontrol/pics/cr32-app-arts.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-background.png b/kcontrol/pics/cr32-app-background.png
index 564ef39e8..ffc5ffaff 100644
--- a/kcontrol/pics/cr32-app-background.png
+++ b/kcontrol/pics/cr32-app-background.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-bell.png b/kcontrol/pics/cr32-app-bell.png
index 8d4079b99..9bc561ee1 100644
--- a/kcontrol/pics/cr32-app-bell.png
+++ b/kcontrol/pics/cr32-app-bell.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-cache.png b/kcontrol/pics/cr32-app-cache.png
index 7700fd9ad..b051f00f3 100644
--- a/kcontrol/pics/cr32-app-cache.png
+++ b/kcontrol/pics/cr32-app-cache.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-clock.png b/kcontrol/pics/cr32-app-clock.png
index 0f93b36cc..d986ffde9 100644
--- a/kcontrol/pics/cr32-app-clock.png
+++ b/kcontrol/pics/cr32-app-clock.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-colors.png b/kcontrol/pics/cr32-app-colors.png
index e5aa87cbd..b7e33832f 100644
--- a/kcontrol/pics/cr32-app-colors.png
+++ b/kcontrol/pics/cr32-app-colors.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-cookie.png b/kcontrol/pics/cr32-app-cookie.png
index 0879588c8..d287673a3 100644
--- a/kcontrol/pics/cr32-app-cookie.png
+++ b/kcontrol/pics/cr32-app-cookie.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-date.png b/kcontrol/pics/cr32-app-date.png
index 54b320347..923d08476 100644
--- a/kcontrol/pics/cr32-app-date.png
+++ b/kcontrol/pics/cr32-app-date.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-energy.png b/kcontrol/pics/cr32-app-energy.png
index e796c0528..573b026c4 100644
--- a/kcontrol/pics/cr32-app-energy.png
+++ b/kcontrol/pics/cr32-app-energy.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-energy_star.png b/kcontrol/pics/cr32-app-energy_star.png
index c26cf4cee..d4209e127 100644
--- a/kcontrol/pics/cr32-app-energy_star.png
+++ b/kcontrol/pics/cr32-app-energy_star.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-filetypes.png b/kcontrol/pics/cr32-app-filetypes.png
index 53d0099be..4d80e91df 100644
--- a/kcontrol/pics/cr32-app-filetypes.png
+++ b/kcontrol/pics/cr32-app-filetypes.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-fonts.png b/kcontrol/pics/cr32-app-fonts.png
index 9ace98c25..e7f40711a 100644
--- a/kcontrol/pics/cr32-app-fonts.png
+++ b/kcontrol/pics/cr32-app-fonts.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-help_index.png b/kcontrol/pics/cr32-app-help_index.png
index d5af86353..8c30c52f8 100644
--- a/kcontrol/pics/cr32-app-help_index.png
+++ b/kcontrol/pics/cr32-app-help_index.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-hwinfo.png b/kcontrol/pics/cr32-app-hwinfo.png
index dfb9a1c14..f59fafd92 100644
--- a/kcontrol/pics/cr32-app-hwinfo.png
+++ b/kcontrol/pics/cr32-app-hwinfo.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-icons.png b/kcontrol/pics/cr32-app-icons.png
index a12f847d9..6b3d9d13d 100644
--- a/kcontrol/pics/cr32-app-icons.png
+++ b/kcontrol/pics/cr32-app-icons.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-iconthemes.png b/kcontrol/pics/cr32-app-iconthemes.png
index c5326752a..425265cd3 100644
--- a/kcontrol/pics/cr32-app-iconthemes.png
+++ b/kcontrol/pics/cr32-app-iconthemes.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-ieee1394.png b/kcontrol/pics/cr32-app-ieee1394.png
index 0253e7976..0767a6a65 100644
--- a/kcontrol/pics/cr32-app-ieee1394.png
+++ b/kcontrol/pics/cr32-app-ieee1394.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmdevices.png b/kcontrol/pics/cr32-app-kcmdevices.png
index d6354ad28..cbca902a0 100644
--- a/kcontrol/pics/cr32-app-kcmdevices.png
+++ b/kcontrol/pics/cr32-app-kcmdevices.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmdrkonqi.png b/kcontrol/pics/cr32-app-kcmdrkonqi.png
index 26bb684cb..41181190e 100644
--- a/kcontrol/pics/cr32-app-kcmdrkonqi.png
+++ b/kcontrol/pics/cr32-app-kcmdrkonqi.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmkicker.png b/kcontrol/pics/cr32-app-kcmkicker.png
index e60d5a26e..12b478e37 100644
--- a/kcontrol/pics/cr32-app-kcmkicker.png
+++ b/kcontrol/pics/cr32-app-kcmkicker.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmkwm.png b/kcontrol/pics/cr32-app-kcmkwm.png
index a44e89764..4d9fd6b87 100644
--- a/kcontrol/pics/cr32-app-kcmkwm.png
+++ b/kcontrol/pics/cr32-app-kcmkwm.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmmemory.png b/kcontrol/pics/cr32-app-kcmmemory.png
index 8b50f37c9..cb09465bd 100644
--- a/kcontrol/pics/cr32-app-kcmmemory.png
+++ b/kcontrol/pics/cr32-app-kcmmemory.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmmidi.png b/kcontrol/pics/cr32-app-kcmmidi.png
index 8430f26fb..c6c2c1a31 100644
--- a/kcontrol/pics/cr32-app-kcmmidi.png
+++ b/kcontrol/pics/cr32-app-kcmmidi.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmpartitions.png b/kcontrol/pics/cr32-app-kcmpartitions.png
index e5a746f31..4a0dec4c8 100644
--- a/kcontrol/pics/cr32-app-kcmpartitions.png
+++ b/kcontrol/pics/cr32-app-kcmpartitions.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmpci.png b/kcontrol/pics/cr32-app-kcmpci.png
index fbde5bd3f..0be06cdf9 100644
--- a/kcontrol/pics/cr32-app-kcmpci.png
+++ b/kcontrol/pics/cr32-app-kcmpci.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmprocessor.png b/kcontrol/pics/cr32-app-kcmprocessor.png
index 72b2b4691..75633e212 100644
--- a/kcontrol/pics/cr32-app-kcmprocessor.png
+++ b/kcontrol/pics/cr32-app-kcmprocessor.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmscsi.png b/kcontrol/pics/cr32-app-kcmscsi.png
index d09ff08a2..9fb204eb6 100644
--- a/kcontrol/pics/cr32-app-kcmscsi.png
+++ b/kcontrol/pics/cr32-app-kcmscsi.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmsound.png b/kcontrol/pics/cr32-app-kcmsound.png
index c122c880b..187025d0f 100644
--- a/kcontrol/pics/cr32-app-kcmsound.png
+++ b/kcontrol/pics/cr32-app-kcmsound.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kcmx.png b/kcontrol/pics/cr32-app-kcmx.png
index 4157c391d..da9f7e1ad 100644
--- a/kcontrol/pics/cr32-app-kcmx.png
+++ b/kcontrol/pics/cr32-app-kcmx.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-key_bindings.png b/kcontrol/pics/cr32-app-key_bindings.png
index 6a3438d92..069c86cf8 100644
--- a/kcontrol/pics/cr32-app-key_bindings.png
+++ b/kcontrol/pics/cr32-app-key_bindings.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-keyboard.png b/kcontrol/pics/cr32-app-keyboard.png
index 3bbc80536..5a457e478 100644
--- a/kcontrol/pics/cr32-app-keyboard.png
+++ b/kcontrol/pics/cr32-app-keyboard.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-keyboard_layout.png b/kcontrol/pics/cr32-app-keyboard_layout.png
index 672c59310..d555a4b96 100644
--- a/kcontrol/pics/cr32-app-keyboard_layout.png
+++ b/kcontrol/pics/cr32-app-keyboard_layout.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-knotify.png b/kcontrol/pics/cr32-app-knotify.png
index ede0d8ed1..b9b1b46e5 100644
--- a/kcontrol/pics/cr32-app-knotify.png
+++ b/kcontrol/pics/cr32-app-knotify.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-kthememgr.png b/kcontrol/pics/cr32-app-kthememgr.png
index 2bf6a7782..114c0550f 100644
--- a/kcontrol/pics/cr32-app-kthememgr.png
+++ b/kcontrol/pics/cr32-app-kthememgr.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-locale.png b/kcontrol/pics/cr32-app-locale.png
index 96b4201ac..ae4433053 100644
--- a/kcontrol/pics/cr32-app-locale.png
+++ b/kcontrol/pics/cr32-app-locale.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-multimedia.png b/kcontrol/pics/cr32-app-multimedia.png
index 1e397c524..bfbd4ea52 100644
--- a/kcontrol/pics/cr32-app-multimedia.png
+++ b/kcontrol/pics/cr32-app-multimedia.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-proxy.png b/kcontrol/pics/cr32-app-proxy.png
index 46f68b243..e3d90ab76 100644
--- a/kcontrol/pics/cr32-app-proxy.png
+++ b/kcontrol/pics/cr32-app-proxy.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-samba.png b/kcontrol/pics/cr32-app-samba.png
index 0d79e5c83..03dd90797 100644
--- a/kcontrol/pics/cr32-app-samba.png
+++ b/kcontrol/pics/cr32-app-samba.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-style.png b/kcontrol/pics/cr32-app-style.png
index 2e29a93a0..a4eed07e0 100644
--- a/kcontrol/pics/cr32-app-style.png
+++ b/kcontrol/pics/cr32-app-style.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-stylesheet.png b/kcontrol/pics/cr32-app-stylesheet.png
index ab8918c30..3af0d2bef 100644
--- a/kcontrol/pics/cr32-app-stylesheet.png
+++ b/kcontrol/pics/cr32-app-stylesheet.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-tdescreensaver.png b/kcontrol/pics/cr32-app-tdescreensaver.png
index f527126bc..4c84e5da1 100644
--- a/kcontrol/pics/cr32-app-tdescreensaver.png
+++ b/kcontrol/pics/cr32-app-tdescreensaver.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-tdmconfig.png b/kcontrol/pics/cr32-app-tdmconfig.png
index a5cbf22d3..49b30dce6 100644
--- a/kcontrol/pics/cr32-app-tdmconfig.png
+++ b/kcontrol/pics/cr32-app-tdmconfig.png
Binary files differ
diff --git a/kcontrol/pics/cr32-app-usb.png b/kcontrol/pics/cr32-app-usb.png
index c7601cb87..e986b5c4b 100644
--- a/kcontrol/pics/cr32-app-usb.png
+++ b/kcontrol/pics/cr32-app-usb.png
Binary files differ
diff --git a/kcontrol/pics/cr32-category-preferences-desktop-peripherals.png b/kcontrol/pics/cr32-category-preferences-desktop-peripherals.png
index 785b8a0fc..3dda90fc9 100644
--- a/kcontrol/pics/cr32-category-preferences-desktop-peripherals.png
+++ b/kcontrol/pics/cr32-category-preferences-desktop-peripherals.png
Binary files differ
diff --git a/kcontrol/pics/cr32-category-preferences-desktop-personal.png b/kcontrol/pics/cr32-category-preferences-desktop-personal.png
index 4f1959142..cc5e97aa5 100644
--- a/kcontrol/pics/cr32-category-preferences-desktop-personal.png
+++ b/kcontrol/pics/cr32-category-preferences-desktop-personal.png
Binary files differ
diff --git a/kcontrol/pics/cr32-category-preferences-desktop.png b/kcontrol/pics/cr32-category-preferences-desktop.png
index 75e29219b..c125c441b 100644
--- a/kcontrol/pics/cr32-category-preferences-desktop.png
+++ b/kcontrol/pics/cr32-category-preferences-desktop.png
Binary files differ
diff --git a/kcontrol/pics/cr32-category-preferences-system.png b/kcontrol/pics/cr32-category-preferences-system.png
index 726784a4d..80c7fced5 100644
--- a/kcontrol/pics/cr32-category-preferences-system.png
+++ b/kcontrol/pics/cr32-category-preferences-system.png
Binary files differ
diff --git a/kcontrol/pics/cr32-device-laptop.png b/kcontrol/pics/cr32-device-laptop.png
index 866f3aae1..adf30f5e0 100644
--- a/kcontrol/pics/cr32-device-laptop.png
+++ b/kcontrol/pics/cr32-device-laptop.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-access.png b/kcontrol/pics/cr48-app-access.png
index c74f3d99f..95d221e44 100644
--- a/kcontrol/pics/cr48-app-access.png
+++ b/kcontrol/pics/cr48-app-access.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-agent.png b/kcontrol/pics/cr48-app-agent.png
index 50864ebc1..09b9daeb2 100644
--- a/kcontrol/pics/cr48-app-agent.png
+++ b/kcontrol/pics/cr48-app-agent.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-arts.png b/kcontrol/pics/cr48-app-arts.png
index 462eff9a2..5066c0297 100644
--- a/kcontrol/pics/cr48-app-arts.png
+++ b/kcontrol/pics/cr48-app-arts.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-background.png b/kcontrol/pics/cr48-app-background.png
index c2328e70b..631905b93 100644
--- a/kcontrol/pics/cr48-app-background.png
+++ b/kcontrol/pics/cr48-app-background.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-bell.png b/kcontrol/pics/cr48-app-bell.png
index 0c4b6c5e3..c7ab7feb7 100644
--- a/kcontrol/pics/cr48-app-bell.png
+++ b/kcontrol/pics/cr48-app-bell.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-cache.png b/kcontrol/pics/cr48-app-cache.png
index df779f4b3..613ca1c92 100644
--- a/kcontrol/pics/cr48-app-cache.png
+++ b/kcontrol/pics/cr48-app-cache.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-clock.png b/kcontrol/pics/cr48-app-clock.png
index b97479759..b879f928b 100644
--- a/kcontrol/pics/cr48-app-clock.png
+++ b/kcontrol/pics/cr48-app-clock.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-colors.png b/kcontrol/pics/cr48-app-colors.png
index 4be4e3501..e076381e0 100644
--- a/kcontrol/pics/cr48-app-colors.png
+++ b/kcontrol/pics/cr48-app-colors.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-cookie.png b/kcontrol/pics/cr48-app-cookie.png
index b3dc63ebc..a43cffd64 100644
--- a/kcontrol/pics/cr48-app-cookie.png
+++ b/kcontrol/pics/cr48-app-cookie.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-date.png b/kcontrol/pics/cr48-app-date.png
index a510951db..e0ce62cd9 100644
--- a/kcontrol/pics/cr48-app-date.png
+++ b/kcontrol/pics/cr48-app-date.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-energy.png b/kcontrol/pics/cr48-app-energy.png
index 269eb4435..b66182b74 100644
--- a/kcontrol/pics/cr48-app-energy.png
+++ b/kcontrol/pics/cr48-app-energy.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-energy_star.png b/kcontrol/pics/cr48-app-energy_star.png
index 5ed89d5ae..53da9fdc5 100644
--- a/kcontrol/pics/cr48-app-energy_star.png
+++ b/kcontrol/pics/cr48-app-energy_star.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-filetypes.png b/kcontrol/pics/cr48-app-filetypes.png
index 37f365e21..ca2cfda20 100644
--- a/kcontrol/pics/cr48-app-filetypes.png
+++ b/kcontrol/pics/cr48-app-filetypes.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-fonts.png b/kcontrol/pics/cr48-app-fonts.png
index a17a1f282..a51c707db 100644
--- a/kcontrol/pics/cr48-app-fonts.png
+++ b/kcontrol/pics/cr48-app-fonts.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-help_index.png b/kcontrol/pics/cr48-app-help_index.png
index 418e1daf8..07c01d003 100644
--- a/kcontrol/pics/cr48-app-help_index.png
+++ b/kcontrol/pics/cr48-app-help_index.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-hwinfo.png b/kcontrol/pics/cr48-app-hwinfo.png
index a7f8b281e..6db94cebe 100644
--- a/kcontrol/pics/cr48-app-hwinfo.png
+++ b/kcontrol/pics/cr48-app-hwinfo.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-icons.png b/kcontrol/pics/cr48-app-icons.png
index a9100e732..aeda713c8 100644
--- a/kcontrol/pics/cr48-app-icons.png
+++ b/kcontrol/pics/cr48-app-icons.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-iconthemes.png b/kcontrol/pics/cr48-app-iconthemes.png
index 3ae2864a2..4b0f8d57d 100644
--- a/kcontrol/pics/cr48-app-iconthemes.png
+++ b/kcontrol/pics/cr48-app-iconthemes.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-ieee1394.png b/kcontrol/pics/cr48-app-ieee1394.png
index e5dd54b89..6ace14e07 100644
--- a/kcontrol/pics/cr48-app-ieee1394.png
+++ b/kcontrol/pics/cr48-app-ieee1394.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmdevices.png b/kcontrol/pics/cr48-app-kcmdevices.png
index 59f5d185a..ac9f8bdc8 100644
--- a/kcontrol/pics/cr48-app-kcmdevices.png
+++ b/kcontrol/pics/cr48-app-kcmdevices.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmdf.png b/kcontrol/pics/cr48-app-kcmdf.png
index 29d351f8b..93323214a 100644
--- a/kcontrol/pics/cr48-app-kcmdf.png
+++ b/kcontrol/pics/cr48-app-kcmdf.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmdrkonqi.png b/kcontrol/pics/cr48-app-kcmdrkonqi.png
index 54d7ce45f..86830c95a 100644
--- a/kcontrol/pics/cr48-app-kcmdrkonqi.png
+++ b/kcontrol/pics/cr48-app-kcmdrkonqi.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmkicker.png b/kcontrol/pics/cr48-app-kcmkicker.png
index dc7aee7dd..90fae4e96 100644
--- a/kcontrol/pics/cr48-app-kcmkicker.png
+++ b/kcontrol/pics/cr48-app-kcmkicker.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmkwm.png b/kcontrol/pics/cr48-app-kcmkwm.png
index aba583bed..b4b30269e 100644
--- a/kcontrol/pics/cr48-app-kcmkwm.png
+++ b/kcontrol/pics/cr48-app-kcmkwm.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmmemory.png b/kcontrol/pics/cr48-app-kcmmemory.png
index 3424cfa33..b64d11d6a 100644
--- a/kcontrol/pics/cr48-app-kcmmemory.png
+++ b/kcontrol/pics/cr48-app-kcmmemory.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmmidi.png b/kcontrol/pics/cr48-app-kcmmidi.png
index 8d716aca4..b27a1bcf1 100644
--- a/kcontrol/pics/cr48-app-kcmmidi.png
+++ b/kcontrol/pics/cr48-app-kcmmidi.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmopengl.png b/kcontrol/pics/cr48-app-kcmopengl.png
index ae934924c..d21a43011 100644
--- a/kcontrol/pics/cr48-app-kcmopengl.png
+++ b/kcontrol/pics/cr48-app-kcmopengl.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmpartitions.png b/kcontrol/pics/cr48-app-kcmpartitions.png
index bddfa43e8..a820a3046 100644
--- a/kcontrol/pics/cr48-app-kcmpartitions.png
+++ b/kcontrol/pics/cr48-app-kcmpartitions.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmpci.png b/kcontrol/pics/cr48-app-kcmpci.png
index 51215dddf..1a79dcbaf 100644
--- a/kcontrol/pics/cr48-app-kcmpci.png
+++ b/kcontrol/pics/cr48-app-kcmpci.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmprocessor.png b/kcontrol/pics/cr48-app-kcmprocessor.png
index 34e98e2f9..61253cf06 100644
--- a/kcontrol/pics/cr48-app-kcmprocessor.png
+++ b/kcontrol/pics/cr48-app-kcmprocessor.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmscsi.png b/kcontrol/pics/cr48-app-kcmscsi.png
index d2abcebcf..ce003921c 100644
--- a/kcontrol/pics/cr48-app-kcmscsi.png
+++ b/kcontrol/pics/cr48-app-kcmscsi.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kcmx.png b/kcontrol/pics/cr48-app-kcmx.png
index 99a635905..9facd5af7 100644
--- a/kcontrol/pics/cr48-app-kcmx.png
+++ b/kcontrol/pics/cr48-app-kcmx.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-key_bindings.png b/kcontrol/pics/cr48-app-key_bindings.png
index e4134ce3e..57692bada 100644
--- a/kcontrol/pics/cr48-app-key_bindings.png
+++ b/kcontrol/pics/cr48-app-key_bindings.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-keyboard.png b/kcontrol/pics/cr48-app-keyboard.png
index 04c821147..596c583c4 100644
--- a/kcontrol/pics/cr48-app-keyboard.png
+++ b/kcontrol/pics/cr48-app-keyboard.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-keyboard_layout.png b/kcontrol/pics/cr48-app-keyboard_layout.png
index ba0359447..ea20a16bc 100644
--- a/kcontrol/pics/cr48-app-keyboard_layout.png
+++ b/kcontrol/pics/cr48-app-keyboard_layout.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kicker.png b/kcontrol/pics/cr48-app-kicker.png
index dc7aee7dd..90fae4e96 100644
--- a/kcontrol/pics/cr48-app-kicker.png
+++ b/kcontrol/pics/cr48-app-kicker.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-knotify.png b/kcontrol/pics/cr48-app-knotify.png
index b0aa6e8fa..6d3b598c7 100644
--- a/kcontrol/pics/cr48-app-knotify.png
+++ b/kcontrol/pics/cr48-app-knotify.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-kthememgr.png b/kcontrol/pics/cr48-app-kthememgr.png
index 50430c726..883dd353b 100644
--- a/kcontrol/pics/cr48-app-kthememgr.png
+++ b/kcontrol/pics/cr48-app-kthememgr.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-locale.png b/kcontrol/pics/cr48-app-locale.png
index e7defacbc..b05844c53 100644
--- a/kcontrol/pics/cr48-app-locale.png
+++ b/kcontrol/pics/cr48-app-locale.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-multimedia.png b/kcontrol/pics/cr48-app-multimedia.png
index dc766a89c..0ef1022f2 100644
--- a/kcontrol/pics/cr48-app-multimedia.png
+++ b/kcontrol/pics/cr48-app-multimedia.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-proxy.png b/kcontrol/pics/cr48-app-proxy.png
index 3683e298c..1317ff9ac 100644
--- a/kcontrol/pics/cr48-app-proxy.png
+++ b/kcontrol/pics/cr48-app-proxy.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-samba.png b/kcontrol/pics/cr48-app-samba.png
index d980263d8..534580c38 100644
--- a/kcontrol/pics/cr48-app-samba.png
+++ b/kcontrol/pics/cr48-app-samba.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-style.png b/kcontrol/pics/cr48-app-style.png
index 5d8af7e87..239281324 100644
--- a/kcontrol/pics/cr48-app-style.png
+++ b/kcontrol/pics/cr48-app-style.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-stylesheet.png b/kcontrol/pics/cr48-app-stylesheet.png
index f74586b3c..cbe7bc267 100644
--- a/kcontrol/pics/cr48-app-stylesheet.png
+++ b/kcontrol/pics/cr48-app-stylesheet.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-tdescreensaver.png b/kcontrol/pics/cr48-app-tdescreensaver.png
index 749f42253..290b72ae9 100644
--- a/kcontrol/pics/cr48-app-tdescreensaver.png
+++ b/kcontrol/pics/cr48-app-tdescreensaver.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-tdmconfig.png b/kcontrol/pics/cr48-app-tdmconfig.png
index d8b241ca9..dd419933e 100644
--- a/kcontrol/pics/cr48-app-tdmconfig.png
+++ b/kcontrol/pics/cr48-app-tdmconfig.png
Binary files differ
diff --git a/kcontrol/pics/cr48-app-usb.png b/kcontrol/pics/cr48-app-usb.png
index 4260b8259..a756a911a 100644
--- a/kcontrol/pics/cr48-app-usb.png
+++ b/kcontrol/pics/cr48-app-usb.png
Binary files differ
diff --git a/kcontrol/pics/cr48-category-preferences-desktop-peripherals.png b/kcontrol/pics/cr48-category-preferences-desktop-peripherals.png
index 5c1e16a5b..c6bbe3173 100644
--- a/kcontrol/pics/cr48-category-preferences-desktop-peripherals.png
+++ b/kcontrol/pics/cr48-category-preferences-desktop-peripherals.png
Binary files differ
diff --git a/kcontrol/pics/cr48-category-preferences-desktop-personal.png b/kcontrol/pics/cr48-category-preferences-desktop-personal.png
index 90aedf0f8..433db418a 100644
--- a/kcontrol/pics/cr48-category-preferences-desktop-personal.png
+++ b/kcontrol/pics/cr48-category-preferences-desktop-personal.png
Binary files differ
diff --git a/kcontrol/pics/cr48-category-preferences-desktop.png b/kcontrol/pics/cr48-category-preferences-desktop.png
index 342ebd7af..b8b4a3a48 100644
--- a/kcontrol/pics/cr48-category-preferences-desktop.png
+++ b/kcontrol/pics/cr48-category-preferences-desktop.png
Binary files differ
diff --git a/kcontrol/pics/cr48-category-preferences-system.png b/kcontrol/pics/cr48-category-preferences-system.png
index 3ed096d9d..dac0b12da 100644
--- a/kcontrol/pics/cr48-category-preferences-system.png
+++ b/kcontrol/pics/cr48-category-preferences-system.png
Binary files differ
diff --git a/kcontrol/pics/cr48-device-laptop.png b/kcontrol/pics/cr48-device-laptop.png
index 380f8ba0b..8f3546ad2 100644
--- a/kcontrol/pics/cr48-device-laptop.png
+++ b/kcontrol/pics/cr48-device-laptop.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-access.png b/kcontrol/pics/cr64-app-access.png
index 1d932d01d..9a762241a 100644
--- a/kcontrol/pics/cr64-app-access.png
+++ b/kcontrol/pics/cr64-app-access.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-arts.png b/kcontrol/pics/cr64-app-arts.png
index cab3cd94a..b1fb880b8 100644
--- a/kcontrol/pics/cr64-app-arts.png
+++ b/kcontrol/pics/cr64-app-arts.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-background.png b/kcontrol/pics/cr64-app-background.png
index 0f9de6c17..50706c290 100644
--- a/kcontrol/pics/cr64-app-background.png
+++ b/kcontrol/pics/cr64-app-background.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-bell.png b/kcontrol/pics/cr64-app-bell.png
index f83c4092e..c8993cef5 100644
--- a/kcontrol/pics/cr64-app-bell.png
+++ b/kcontrol/pics/cr64-app-bell.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-cache.png b/kcontrol/pics/cr64-app-cache.png
index a49b55d1d..6ddf0e0fd 100644
--- a/kcontrol/pics/cr64-app-cache.png
+++ b/kcontrol/pics/cr64-app-cache.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-clock.png b/kcontrol/pics/cr64-app-clock.png
index 5698b5e05..e32c65cbf 100644
--- a/kcontrol/pics/cr64-app-clock.png
+++ b/kcontrol/pics/cr64-app-clock.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-colors.png b/kcontrol/pics/cr64-app-colors.png
index bf01037f5..40fcfaff5 100644
--- a/kcontrol/pics/cr64-app-colors.png
+++ b/kcontrol/pics/cr64-app-colors.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-cookie.png b/kcontrol/pics/cr64-app-cookie.png
index 3988e0f23..8460269e7 100644
--- a/kcontrol/pics/cr64-app-cookie.png
+++ b/kcontrol/pics/cr64-app-cookie.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-date.png b/kcontrol/pics/cr64-app-date.png
index 06761d77e..3b46e6a7c 100644
--- a/kcontrol/pics/cr64-app-date.png
+++ b/kcontrol/pics/cr64-app-date.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-energy.png b/kcontrol/pics/cr64-app-energy.png
index 5223681ff..c233a51a9 100644
--- a/kcontrol/pics/cr64-app-energy.png
+++ b/kcontrol/pics/cr64-app-energy.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-energy_star.png b/kcontrol/pics/cr64-app-energy_star.png
index 13a4640ab..23756779d 100644
--- a/kcontrol/pics/cr64-app-energy_star.png
+++ b/kcontrol/pics/cr64-app-energy_star.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-filetypes.png b/kcontrol/pics/cr64-app-filetypes.png
index 6f723a9cc..5dc7ef613 100644
--- a/kcontrol/pics/cr64-app-filetypes.png
+++ b/kcontrol/pics/cr64-app-filetypes.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-fonts.png b/kcontrol/pics/cr64-app-fonts.png
index 6fdab333d..6808d43f0 100644
--- a/kcontrol/pics/cr64-app-fonts.png
+++ b/kcontrol/pics/cr64-app-fonts.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-help_index.png b/kcontrol/pics/cr64-app-help_index.png
index 56be1b7b0..2a48aa8fd 100644
--- a/kcontrol/pics/cr64-app-help_index.png
+++ b/kcontrol/pics/cr64-app-help_index.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-hwinfo.png b/kcontrol/pics/cr64-app-hwinfo.png
index bb3ac3019..100fa367f 100644
--- a/kcontrol/pics/cr64-app-hwinfo.png
+++ b/kcontrol/pics/cr64-app-hwinfo.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-icons.png b/kcontrol/pics/cr64-app-icons.png
index 3891bc74d..0635b6b87 100644
--- a/kcontrol/pics/cr64-app-icons.png
+++ b/kcontrol/pics/cr64-app-icons.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-ieee1394.png b/kcontrol/pics/cr64-app-ieee1394.png
index eb8d540b2..a9fc990c8 100644
--- a/kcontrol/pics/cr64-app-ieee1394.png
+++ b/kcontrol/pics/cr64-app-ieee1394.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-kcmdevices.png b/kcontrol/pics/cr64-app-kcmdevices.png
index 396b3d3ba..461628285 100644
--- a/kcontrol/pics/cr64-app-kcmdevices.png
+++ b/kcontrol/pics/cr64-app-kcmdevices.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-kcmdf.png b/kcontrol/pics/cr64-app-kcmdf.png
index 58378b148..78aea3b32 100644
--- a/kcontrol/pics/cr64-app-kcmdf.png
+++ b/kcontrol/pics/cr64-app-kcmdf.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-kcmkwm.png b/kcontrol/pics/cr64-app-kcmkwm.png
index d453cd2cb..982afdb16 100644
--- a/kcontrol/pics/cr64-app-kcmkwm.png
+++ b/kcontrol/pics/cr64-app-kcmkwm.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-kcmmemory.png b/kcontrol/pics/cr64-app-kcmmemory.png
index 61f7cc517..c56f138b0 100644
--- a/kcontrol/pics/cr64-app-kcmmemory.png
+++ b/kcontrol/pics/cr64-app-kcmmemory.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-kcmpartitions.png b/kcontrol/pics/cr64-app-kcmpartitions.png
index 1bcce6d00..42ca2f9f1 100644
--- a/kcontrol/pics/cr64-app-kcmpartitions.png
+++ b/kcontrol/pics/cr64-app-kcmpartitions.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-kcmpci.png b/kcontrol/pics/cr64-app-kcmpci.png
index 6fae64367..262326d25 100644
--- a/kcontrol/pics/cr64-app-kcmpci.png
+++ b/kcontrol/pics/cr64-app-kcmpci.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-kcmx.png b/kcontrol/pics/cr64-app-kcmx.png
index 64e33b953..e7b91bdd8 100644
--- a/kcontrol/pics/cr64-app-kcmx.png
+++ b/kcontrol/pics/cr64-app-kcmx.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-key_bindings.png b/kcontrol/pics/cr64-app-key_bindings.png
index ca5090329..e549f0e53 100644
--- a/kcontrol/pics/cr64-app-key_bindings.png
+++ b/kcontrol/pics/cr64-app-key_bindings.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-knotify.png b/kcontrol/pics/cr64-app-knotify.png
index 3a4d918ae..7036262ee 100644
--- a/kcontrol/pics/cr64-app-knotify.png
+++ b/kcontrol/pics/cr64-app-knotify.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-kthememgr.png b/kcontrol/pics/cr64-app-kthememgr.png
index 784b5aef3..201af4fc4 100644
--- a/kcontrol/pics/cr64-app-kthememgr.png
+++ b/kcontrol/pics/cr64-app-kthememgr.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-locale.png b/kcontrol/pics/cr64-app-locale.png
index 042c0d345..b88c1aa9c 100644
--- a/kcontrol/pics/cr64-app-locale.png
+++ b/kcontrol/pics/cr64-app-locale.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-multimedia.png b/kcontrol/pics/cr64-app-multimedia.png
index 406aad0f1..e4de0d7f7 100644
--- a/kcontrol/pics/cr64-app-multimedia.png
+++ b/kcontrol/pics/cr64-app-multimedia.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-proxy.png b/kcontrol/pics/cr64-app-proxy.png
index 9b5f5b6a8..b77a185c2 100644
--- a/kcontrol/pics/cr64-app-proxy.png
+++ b/kcontrol/pics/cr64-app-proxy.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-samba.png b/kcontrol/pics/cr64-app-samba.png
index 2bade600c..25807367d 100644
--- a/kcontrol/pics/cr64-app-samba.png
+++ b/kcontrol/pics/cr64-app-samba.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-style.png b/kcontrol/pics/cr64-app-style.png
index d3f70b0cb..6cf7cde02 100644
--- a/kcontrol/pics/cr64-app-style.png
+++ b/kcontrol/pics/cr64-app-style.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-stylesheet.png b/kcontrol/pics/cr64-app-stylesheet.png
index ac393bc3e..877009d54 100644
--- a/kcontrol/pics/cr64-app-stylesheet.png
+++ b/kcontrol/pics/cr64-app-stylesheet.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-tdescreensaver.png b/kcontrol/pics/cr64-app-tdescreensaver.png
index 69c8214fb..54a8fc847 100644
--- a/kcontrol/pics/cr64-app-tdescreensaver.png
+++ b/kcontrol/pics/cr64-app-tdescreensaver.png
Binary files differ
diff --git a/kcontrol/pics/cr64-app-tdmconfig.png b/kcontrol/pics/cr64-app-tdmconfig.png
index 57c5726d0..b48d949f6 100644
--- a/kcontrol/pics/cr64-app-tdmconfig.png
+++ b/kcontrol/pics/cr64-app-tdmconfig.png
Binary files differ
diff --git a/kcontrol/pics/cr64-category-preferences-desktop-personal.png b/kcontrol/pics/cr64-category-preferences-desktop-personal.png
index 136dcfe11..1f0a10af6 100644
--- a/kcontrol/pics/cr64-category-preferences-desktop-personal.png
+++ b/kcontrol/pics/cr64-category-preferences-desktop-personal.png
Binary files differ
diff --git a/kcontrol/pics/cr64-category-preferences-desktop.png b/kcontrol/pics/cr64-category-preferences-desktop.png
index b73346e44..51c28feaf 100644
--- a/kcontrol/pics/cr64-category-preferences-desktop.png
+++ b/kcontrol/pics/cr64-category-preferences-desktop.png
Binary files differ
diff --git a/kcontrol/pics/cr64-device-laptop.png b/kcontrol/pics/cr64-device-laptop.png
index 6084660cc..41879e6bc 100644
--- a/kcontrol/pics/cr64-device-laptop.png
+++ b/kcontrol/pics/cr64-device-laptop.png
Binary files differ
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
index 61eef357e..96211d80e 100644
--- a/kcontrol/tdefontinst/kcmfontinst/cr16-action-newfont.png
+++ b/kcontrol/tdefontinst/kcmfontinst/cr16-action-newfont.png
Binary files differ
diff --git a/kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.png b/kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.png
index 049197a35..5804667fd 100644
--- a/kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.png
+++ b/kcontrol/tdefontinst/kcmfontinst/cr22-action-newfont.png
Binary files differ
diff --git a/kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.png b/kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.png
index 9cd3d57bc..746bbc703 100644
--- a/kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.png
+++ b/kcontrol/tdefontinst/kcmfontinst/cr32-action-newfont.png
Binary files differ
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
index 33de9be7c..4d7f6005c 100644
--- a/kdesktop/patterns/fish.png
+++ b/kdesktop/patterns/fish.png
Binary files differ
diff --git a/kdesktop/patterns/flowers.png b/kdesktop/patterns/flowers.png
index cab6af8eb..9ab816d09 100644
--- a/kdesktop/patterns/flowers.png
+++ b/kdesktop/patterns/flowers.png
Binary files differ
diff --git a/kdesktop/patterns/pavement.png b/kdesktop/patterns/pavement.png
index 7ba9bcf14..c06a42da5 100644
--- a/kdesktop/patterns/pavement.png
+++ b/kdesktop/patterns/pavement.png
Binary files differ
diff --git a/kdesktop/patterns/rattan.png b/kdesktop/patterns/rattan.png
index 28f600541..beccc178e 100644
--- a/kdesktop/patterns/rattan.png
+++ b/kdesktop/patterns/rattan.png
Binary files differ
diff --git a/kdesktop/patterns/stonewall2.png b/kdesktop/patterns/stonewall2.png
index cb9f10f40..a750d680f 100644
--- a/kdesktop/patterns/stonewall2.png
+++ b/kdesktop/patterns/stonewall2.png
Binary files differ
diff --git a/kdesktop/patterns/triangles.png b/kdesktop/patterns/triangles.png
index cde9068eb..6d9d637e4 100644
--- a/kdesktop/patterns/triangles.png
+++ b/kdesktop/patterns/triangles.png
Binary files differ
diff --git a/kdesktop/pics/cr32-app-error.png b/kdesktop/pics/cr32-app-error.png
index 1de7a6fda..18efe897b 100644
--- a/kdesktop/pics/cr32-app-error.png
+++ b/kdesktop/pics/cr32-app-error.png
Binary files differ
diff --git a/kdesktop/pics/ksslogo.png b/kdesktop/pics/ksslogo.png
index 953ecdddb..466215dee 100644
--- a/kdesktop/pics/ksslogo.png
+++ b/kdesktop/pics/ksslogo.png
Binary files differ
diff --git a/kdesktop/pics/splash.png b/kdesktop/pics/splash.png
index c32afcc1e..1d5738697 100644
--- a/kdesktop/pics/splash.png
+++ b/kdesktop/pics/splash.png
Binary files differ
diff --git a/kfind/hi16-app-kfind.png b/kfind/hi16-app-kfind.png
index f2b60daa7..b3abedcff 100644
--- a/kfind/hi16-app-kfind.png
+++ b/kfind/hi16-app-kfind.png
Binary files differ
diff --git a/kfind/hi22-app-kfind.png b/kfind/hi22-app-kfind.png
index 647dc2196..dbc3b2b84 100644
--- a/kfind/hi22-app-kfind.png
+++ b/kfind/hi22-app-kfind.png
Binary files differ
diff --git a/kfind/hi32-app-kfind.png b/kfind/hi32-app-kfind.png
index 171c2b1d2..1a1cd173e 100644
--- a/kfind/hi32-app-kfind.png
+++ b/kfind/hi32-app-kfind.png
Binary files differ
diff --git a/kfind/hi48-app-kfind.png b/kfind/hi48-app-kfind.png
index 1d472379a..41dc77f90 100644
--- a/kfind/hi48-app-kfind.png
+++ b/kfind/hi48-app-kfind.png
Binary files differ
diff --git a/kfind/hi64-app-kfind.png b/kfind/hi64-app-kfind.png
index fa5b5f0c4..500e4f65e 100644
--- a/kfind/hi64-app-kfind.png
+++ b/kfind/hi64-app-kfind.png
Binary files differ
diff --git a/kfind/pics/lo22-action-archive.png b/kfind/pics/lo22-action-archive.png
index 54e73c2f9..c883f7657 100644
--- a/kfind/pics/lo22-action-archive.png
+++ b/kfind/pics/lo22-action-archive.png
Binary files differ
diff --git a/kfind/pics/lo22-action-delete.png b/kfind/pics/lo22-action-delete.png
index 1018d6e22..61c1cd8ce 100644
--- a/kfind/pics/lo22-action-delete.png
+++ b/kfind/pics/lo22-action-delete.png
Binary files differ
diff --git a/kfind/pics/lo22-action-idea.png b/kfind/pics/lo22-action-idea.png
index e348d48b6..b18de98f9 100644
--- a/kfind/pics/lo22-action-idea.png
+++ b/kfind/pics/lo22-action-idea.png
Binary files differ
diff --git a/kfind/pics/lo22-action-info.png b/kfind/pics/lo22-action-info.png
index 41aec81ef..2e4b20030 100644
--- a/kfind/pics/lo22-action-info.png
+++ b/kfind/pics/lo22-action-info.png
Binary files differ
diff --git a/kfind/pics/lo22-action-openfile.png b/kfind/pics/lo22-action-openfile.png
index bdf6c55d9..25aebc134 100644
--- a/kfind/pics/lo22-action-openfile.png
+++ b/kfind/pics/lo22-action-openfile.png
Binary files differ
diff --git a/kfind/pics/lo22-action-save.png b/kfind/pics/lo22-action-save.png
index 4ae7ad4cd..f9688cb06 100644
--- a/kfind/pics/lo22-action-save.png
+++ b/kfind/pics/lo22-action-save.png
Binary files differ
diff --git a/kfind/pics/lo22-action-search.png b/kfind/pics/lo22-action-search.png
index 2ed5031c4..824de2a62 100644
--- a/kfind/pics/lo22-action-search.png
+++ b/kfind/pics/lo22-action-search.png
Binary files differ
diff --git a/khelpcenter/htmlsearch/star.png b/khelpcenter/htmlsearch/star.png
index 5e7615871..9c912b3d5 100644
--- a/khelpcenter/htmlsearch/star.png
+++ b/khelpcenter/htmlsearch/star.png
Binary files differ
diff --git a/khelpcenter/htmlsearch/star_blank.png b/khelpcenter/htmlsearch/star_blank.png
index 2689281af..58294d00b 100644
--- a/khelpcenter/htmlsearch/star_blank.png
+++ b/khelpcenter/htmlsearch/star_blank.png
Binary files differ
diff --git a/khelpcenter/pics/hi128-app-khelpcenter.png b/khelpcenter/pics/hi128-app-khelpcenter.png
index 949fd3dce..17efd9225 100644
--- a/khelpcenter/pics/hi128-app-khelpcenter.png
+++ b/khelpcenter/pics/hi128-app-khelpcenter.png
Binary files differ
diff --git a/khelpcenter/pics/hi16-app-khelpcenter.png b/khelpcenter/pics/hi16-app-khelpcenter.png
index d242b4b3e..29b089f64 100644
--- a/khelpcenter/pics/hi16-app-khelpcenter.png
+++ b/khelpcenter/pics/hi16-app-khelpcenter.png
Binary files differ
diff --git a/khelpcenter/pics/hi22-app-khelpcenter.png b/khelpcenter/pics/hi22-app-khelpcenter.png
index 71f59060a..c8fbfc544 100644
--- a/khelpcenter/pics/hi22-app-khelpcenter.png
+++ b/khelpcenter/pics/hi22-app-khelpcenter.png
Binary files differ
diff --git a/khelpcenter/pics/hi32-app-khelpcenter.png b/khelpcenter/pics/hi32-app-khelpcenter.png
index 79dd450e8..637d7732a 100644
--- a/khelpcenter/pics/hi32-app-khelpcenter.png
+++ b/khelpcenter/pics/hi32-app-khelpcenter.png
Binary files differ
diff --git a/khelpcenter/pics/hi48-app-khelpcenter.png b/khelpcenter/pics/hi48-app-khelpcenter.png
index 24582cf57..153e9f7ea 100644
--- a/khelpcenter/pics/hi48-app-khelpcenter.png
+++ b/khelpcenter/pics/hi48-app-khelpcenter.png
Binary files differ
diff --git a/khelpcenter/pics/hi64-app-khelpcenter.png b/khelpcenter/pics/hi64-app-khelpcenter.png
index 6ea007cf8..0c2550402 100644
--- a/khelpcenter/pics/hi64-app-khelpcenter.png
+++ b/khelpcenter/pics/hi64-app-khelpcenter.png
Binary files differ
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
index 1e919e897..185d7f249 100644
--- a/khotkeys/kcontrol/hi16-app-khotkeys.png
+++ b/khotkeys/kcontrol/hi16-app-khotkeys.png
Binary files differ
diff --git a/khotkeys/kcontrol/hi32-app-khotkeys.png b/khotkeys/kcontrol/hi32-app-khotkeys.png
index b1b86f875..e8f4d0e17 100644
--- a/khotkeys/kcontrol/hi32-app-khotkeys.png
+++ b/khotkeys/kcontrol/hi32-app-khotkeys.png
Binary files differ
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
index 32e5e90d8..b240a405a 100644
--- a/kicker/applets/clock/lcd.png
+++ b/kicker/applets/clock/lcd.png
Binary files differ
diff --git a/kicker/applets/naughty/naughty-happy.png b/kicker/applets/naughty/naughty-happy.png
index 3200b5270..4c3505dfc 100644
--- a/kicker/applets/naughty/naughty-happy.png
+++ b/kicker/applets/naughty/naughty-happy.png
Binary files differ
diff --git a/kicker/applets/naughty/naughty-sad.png b/kicker/applets/naughty/naughty-sad.png
index 9b6541907..ae6d727f2 100644
--- a/kicker/applets/naughty/naughty-sad.png
+++ b/kicker/applets/naughty/naughty-sad.png
Binary files differ
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
index 37262272e..aa361bddd 100644
--- a/kicker/data/app_start_anim/disk1.png
+++ b/kicker/data/app_start_anim/disk1.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk10.png b/kicker/data/app_start_anim/disk10.png
index 6f5c65d54..a6da557d5 100644
--- a/kicker/data/app_start_anim/disk10.png
+++ b/kicker/data/app_start_anim/disk10.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk2.png b/kicker/data/app_start_anim/disk2.png
index cac143984..db2c9968f 100644
--- a/kicker/data/app_start_anim/disk2.png
+++ b/kicker/data/app_start_anim/disk2.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk3.png b/kicker/data/app_start_anim/disk3.png
index 7cfc09c84..fa1ceb9da 100644
--- a/kicker/data/app_start_anim/disk3.png
+++ b/kicker/data/app_start_anim/disk3.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk4.png b/kicker/data/app_start_anim/disk4.png
index 0de1cf4e7..aa5d883ac 100644
--- a/kicker/data/app_start_anim/disk4.png
+++ b/kicker/data/app_start_anim/disk4.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk5.png b/kicker/data/app_start_anim/disk5.png
index 62e26f497..135344765 100644
--- a/kicker/data/app_start_anim/disk5.png
+++ b/kicker/data/app_start_anim/disk5.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk6.png b/kicker/data/app_start_anim/disk6.png
index 1bd210ffc..65b63cf4c 100644
--- a/kicker/data/app_start_anim/disk6.png
+++ b/kicker/data/app_start_anim/disk6.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk7.png b/kicker/data/app_start_anim/disk7.png
index a992322a4..26cedf88c 100644
--- a/kicker/data/app_start_anim/disk7.png
+++ b/kicker/data/app_start_anim/disk7.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk8.png b/kicker/data/app_start_anim/disk8.png
index b9c86a0b8..eab2fd793 100644
--- a/kicker/data/app_start_anim/disk8.png
+++ b/kicker/data/app_start_anim/disk8.png
Binary files differ
diff --git a/kicker/data/app_start_anim/disk9.png b/kicker/data/app_start_anim/disk9.png
index 6bbbb2258..52118d5d7 100644
--- a/kicker/data/app_start_anim/disk9.png
+++ b/kicker/data/app_start_anim/disk9.png
Binary files differ
diff --git a/kicker/data/icons/actions/cr16-action-modified.png b/kicker/data/icons/actions/cr16-action-modified.png
index 41b3f4367..c4e7831da 100644
--- a/kicker/data/icons/actions/cr16-action-modified.png
+++ b/kicker/data/icons/actions/cr16-action-modified.png
Binary files differ
diff --git a/kicker/data/icons/actions/lo16-action-modified.png b/kicker/data/icons/actions/lo16-action-modified.png
index 63c705f00..69d2f236c 100644
--- a/kicker/data/icons/actions/lo16-action-modified.png
+++ b/kicker/data/icons/actions/lo16-action-modified.png
Binary files differ
diff --git a/kicker/data/icons/cr16-app-kdisknav.png b/kicker/data/icons/cr16-app-kdisknav.png
index 3ba8a1416..c38975125 100644
--- a/kicker/data/icons/cr16-app-kdisknav.png
+++ b/kicker/data/icons/cr16-app-kdisknav.png
Binary files differ
diff --git a/kicker/data/icons/cr16-app-kicker.png b/kicker/data/icons/cr16-app-kicker.png
index 0d04030fc..2331a29e0 100644
--- a/kicker/data/icons/cr16-app-kicker.png
+++ b/kicker/data/icons/cr16-app-kicker.png
Binary files differ
diff --git a/kicker/data/icons/cr16-app-panel.png b/kicker/data/icons/cr16-app-panel.png
index 0d04030fc..2331a29e0 100644
--- a/kicker/data/icons/cr16-app-panel.png
+++ b/kicker/data/icons/cr16-app-panel.png
Binary files differ
diff --git a/kicker/data/icons/cr16-app-window_list.png b/kicker/data/icons/cr16-app-window_list.png
index d8afab4b2..33439e716 100644
--- a/kicker/data/icons/cr16-app-window_list.png
+++ b/kicker/data/icons/cr16-app-window_list.png
Binary files differ
diff --git a/kicker/data/icons/cr32-app-kdisknav.png b/kicker/data/icons/cr32-app-kdisknav.png
index 370de627f..452302379 100644
--- a/kicker/data/icons/cr32-app-kdisknav.png
+++ b/kicker/data/icons/cr32-app-kdisknav.png
Binary files differ
diff --git a/kicker/data/icons/cr32-app-window_list.png b/kicker/data/icons/cr32-app-window_list.png
index f8d64d1df..2de7c18db 100644
--- a/kicker/data/icons/cr32-app-window_list.png
+++ b/kicker/data/icons/cr32-app-window_list.png
Binary files differ
diff --git a/kicker/data/icons/cr48-app-kdisknav.png b/kicker/data/icons/cr48-app-kdisknav.png
index fbc259e95..8c1ae5c1f 100644
--- a/kicker/data/icons/cr48-app-kdisknav.png
+++ b/kicker/data/icons/cr48-app-kdisknav.png
Binary files differ
diff --git a/kicker/data/icons/cr48-app-window_list.png b/kicker/data/icons/cr48-app-window_list.png
index ca164a12a..f19da6616 100644
--- a/kicker/data/icons/cr48-app-window_list.png
+++ b/kicker/data/icons/cr48-app-window_list.png
Binary files differ
diff --git a/kicker/data/kickoff/button-box-gradient-topdown.png b/kicker/data/kickoff/button-box-gradient-topdown.png
index 378816342..366cbf573 100644
--- a/kicker/data/kickoff/button-box-gradient-topdown.png
+++ b/kicker/data/kickoff/button-box-gradient-topdown.png
Binary files differ
diff --git a/kicker/data/kickoff/button-box-gradient.png b/kicker/data/kickoff/button-box-gradient.png
index a7c11adba..2057c4ac3 100644
--- a/kicker/data/kickoff/button-box-gradient.png
+++ b/kicker/data/kickoff/button-box-gradient.png
Binary files differ
diff --git a/kicker/data/kickoff/button-box-left-corner.png b/kicker/data/kickoff/button-box-left-corner.png
index c4080cb00..5a64ba1a2 100644
--- a/kicker/data/kickoff/button-box-left-corner.png
+++ b/kicker/data/kickoff/button-box-left-corner.png
Binary files differ
diff --git a/kicker/data/kickoff/button-box-left.png b/kicker/data/kickoff/button-box-left.png
index 3b532f8bd..9eb49030e 100644
--- a/kicker/data/kickoff/button-box-left.png
+++ b/kicker/data/kickoff/button-box-left.png
Binary files differ
diff --git a/kicker/data/kickoff/button-box-right-corner.png b/kicker/data/kickoff/button-box-right-corner.png
index ef44b1fab..8ee01581b 100644
--- a/kicker/data/kickoff/button-box-right-corner.png
+++ b/kicker/data/kickoff/button-box-right-corner.png
Binary files differ
diff --git a/kicker/data/kickoff/button-box-top.png b/kicker/data/kickoff/button-box-top.png
index 1cac298be..5bf01a58e 100644
--- a/kicker/data/kickoff/button-box-top.png
+++ b/kicker/data/kickoff/button-box-top.png
Binary files differ
diff --git a/kicker/data/kickoff/cr128-action-suspend2disk.png b/kicker/data/kickoff/cr128-action-suspend2disk.png
index b3ac2fe05..bb3b41464 100644
--- a/kicker/data/kickoff/cr128-action-suspend2disk.png
+++ b/kicker/data/kickoff/cr128-action-suspend2disk.png
Binary files differ
diff --git a/kicker/data/kickoff/cr128-action-suspend2ram.png b/kicker/data/kickoff/cr128-action-suspend2ram.png
index 9e641bd47..edbf6a609 100644
--- a/kicker/data/kickoff/cr128-action-suspend2ram.png
+++ b/kicker/data/kickoff/cr128-action-suspend2ram.png
Binary files differ
diff --git a/kicker/data/kickoff/cr16-action-suspend2disk.png b/kicker/data/kickoff/cr16-action-suspend2disk.png
index a28ab8ad9..b938e8acf 100644
--- a/kicker/data/kickoff/cr16-action-suspend2disk.png
+++ b/kicker/data/kickoff/cr16-action-suspend2disk.png
Binary files differ
diff --git a/kicker/data/kickoff/cr16-action-suspend2ram.png b/kicker/data/kickoff/cr16-action-suspend2ram.png
index 45738ccc5..58a129514 100644
--- a/kicker/data/kickoff/cr16-action-suspend2ram.png
+++ b/kicker/data/kickoff/cr16-action-suspend2ram.png
Binary files differ
diff --git a/kicker/data/kickoff/cr32-action-leave.png b/kicker/data/kickoff/cr32-action-leave.png
index 89dc15953..e1430411b 100644
--- a/kicker/data/kickoff/cr32-action-leave.png
+++ b/kicker/data/kickoff/cr32-action-leave.png
Binary files differ
diff --git a/kicker/data/kickoff/cr32-action-suspend2disk.png b/kicker/data/kickoff/cr32-action-suspend2disk.png
index 7bcb027b1..a1b36de9b 100644
--- a/kicker/data/kickoff/cr32-action-suspend2disk.png
+++ b/kicker/data/kickoff/cr32-action-suspend2disk.png
Binary files differ
diff --git a/kicker/data/kickoff/cr32-action-suspend2ram.png b/kicker/data/kickoff/cr32-action-suspend2ram.png
index 7a96cd24f..9b9e90eb0 100644
--- a/kicker/data/kickoff/cr32-action-suspend2ram.png
+++ b/kicker/data/kickoff/cr32-action-suspend2ram.png
Binary files differ
diff --git a/kicker/data/kickoff/cr48-action-leave.png b/kicker/data/kickoff/cr48-action-leave.png
index 7c01634b9..459505ed9 100644
--- a/kicker/data/kickoff/cr48-action-leave.png
+++ b/kicker/data/kickoff/cr48-action-leave.png
Binary files differ
diff --git a/kicker/data/kickoff/cr48-action-suspend2disk.png b/kicker/data/kickoff/cr48-action-suspend2disk.png
index 9ff2148b8..f617eafbb 100644
--- a/kicker/data/kickoff/cr48-action-suspend2disk.png
+++ b/kicker/data/kickoff/cr48-action-suspend2disk.png
Binary files differ
diff --git a/kicker/data/kickoff/cr48-action-suspend2ram.png b/kicker/data/kickoff/cr48-action-suspend2ram.png
index 2aefa6ce4..770256eb9 100644
--- a/kicker/data/kickoff/cr48-action-suspend2ram.png
+++ b/kicker/data/kickoff/cr48-action-suspend2ram.png
Binary files differ
diff --git a/kicker/data/kickoff/cr48-app-recently_used.png b/kicker/data/kickoff/cr48-app-recently_used.png
index b97479759..b879f928b 100644
--- a/kicker/data/kickoff/cr48-app-recently_used.png
+++ b/kicker/data/kickoff/cr48-app-recently_used.png
Binary files differ
diff --git a/kicker/data/kickoff/cr64-action-suspend2disk.png b/kicker/data/kickoff/cr64-action-suspend2disk.png
index f6e57d786..fd3ea9293 100644
--- a/kicker/data/kickoff/cr64-action-suspend2disk.png
+++ b/kicker/data/kickoff/cr64-action-suspend2disk.png
Binary files differ
diff --git a/kicker/data/kickoff/cr64-action-suspend2ram.png b/kicker/data/kickoff/cr64-action-suspend2ram.png
index cdb47d04f..695f3f06a 100644
--- a/kicker/data/kickoff/cr64-action-suspend2ram.png
+++ b/kicker/data/kickoff/cr64-action-suspend2ram.png
Binary files differ
diff --git a/kicker/data/kickoff/kmenu_basic.png b/kicker/data/kickoff/kmenu_basic.png
index 37f13f8af..4674a03ac 100644
--- a/kicker/data/kickoff/kmenu_basic.png
+++ b/kicker/data/kickoff/kmenu_basic.png
Binary files differ
diff --git a/kicker/data/kickoff/left_triangle.png b/kicker/data/kickoff/left_triangle.png
index b8ac404fd..ca532c37f 100644
--- a/kicker/data/kickoff/left_triangle.png
+++ b/kicker/data/kickoff/left_triangle.png
Binary files differ
diff --git a/kicker/data/kickoff/main_border_bc.png b/kicker/data/kickoff/main_border_bc.png
index 05e497763..42b80f938 100644
--- a/kicker/data/kickoff/main_border_bc.png
+++ b/kicker/data/kickoff/main_border_bc.png
Binary files differ
diff --git a/kicker/data/kickoff/main_border_lc.png b/kicker/data/kickoff/main_border_lc.png
index c440e859e..9e20bd2fa 100644
--- a/kicker/data/kickoff/main_border_lc.png
+++ b/kicker/data/kickoff/main_border_lc.png
Binary files differ
diff --git a/kicker/data/kickoff/main_border_rc.png b/kicker/data/kickoff/main_border_rc.png
index 6cef8af01..e08386ca9 100644
--- a/kicker/data/kickoff/main_border_rc.png
+++ b/kicker/data/kickoff/main_border_rc.png
Binary files differ
diff --git a/kicker/data/kickoff/main_border_tc.png b/kicker/data/kickoff/main_border_tc.png
index bc03e85dd..50aaf0feb 100644
--- a/kicker/data/kickoff/main_border_tc.png
+++ b/kicker/data/kickoff/main_border_tc.png
Binary files differ
diff --git a/kicker/data/kickoff/main_corner_bl.png b/kicker/data/kickoff/main_corner_bl.png
index 32ea680f1..fdaaa785e 100644
--- a/kicker/data/kickoff/main_corner_bl.png
+++ b/kicker/data/kickoff/main_corner_bl.png
Binary files differ
diff --git a/kicker/data/kickoff/main_corner_br.png b/kicker/data/kickoff/main_corner_br.png
index b2d898ab6..6304a6880 100644
--- a/kicker/data/kickoff/main_corner_br.png
+++ b/kicker/data/kickoff/main_corner_br.png
Binary files differ
diff --git a/kicker/data/kickoff/main_corner_tl.png b/kicker/data/kickoff/main_corner_tl.png
index 11fe645ce..f5a357260 100644
--- a/kicker/data/kickoff/main_corner_tl.png
+++ b/kicker/data/kickoff/main_corner_tl.png
Binary files differ
diff --git a/kicker/data/kickoff/main_corner_tr.png b/kicker/data/kickoff/main_corner_tr.png
index a439d9763..6d67b1fce 100644
--- a/kicker/data/kickoff/main_corner_tr.png
+++ b/kicker/data/kickoff/main_corner_tr.png
Binary files differ
diff --git a/kicker/data/kickoff/menu_separator.png b/kicker/data/kickoff/menu_separator.png
index 2ba13727d..f4d42ed7b 100644
--- a/kicker/data/kickoff/menu_separator.png
+++ b/kicker/data/kickoff/menu_separator.png
Binary files differ
diff --git a/kicker/data/kickoff/resize_handle.png b/kicker/data/kickoff/resize_handle.png
index c0811dc50..96679a1ae 100644
--- a/kicker/data/kickoff/resize_handle.png
+++ b/kicker/data/kickoff/resize_handle.png
Binary files differ
diff --git a/kicker/data/kickoff/right_triangle.png b/kicker/data/kickoff/right_triangle.png
index 9766030c0..818480665 100644
--- a/kicker/data/kickoff/right_triangle.png
+++ b/kicker/data/kickoff/right_triangle.png
Binary files differ
diff --git a/kicker/data/kickoff/search-gradient-topdown.png b/kicker/data/kickoff/search-gradient-topdown.png
index b13a19290..c3dda9839 100644
--- a/kicker/data/kickoff/search-gradient-topdown.png
+++ b/kicker/data/kickoff/search-gradient-topdown.png
Binary files differ
diff --git a/kicker/data/kickoff/search-gradient.png b/kicker/data/kickoff/search-gradient.png
index 3478ea18b..16cdcf7d9 100644
--- a/kicker/data/kickoff/search-gradient.png
+++ b/kicker/data/kickoff/search-gradient.png
Binary files differ
diff --git a/kicker/data/kickoff/search-tab-center.png b/kicker/data/kickoff/search-tab-center.png
index 26ec2f2e9..56201a3e3 100644
--- a/kicker/data/kickoff/search-tab-center.png
+++ b/kicker/data/kickoff/search-tab-center.png
Binary files differ
diff --git a/kicker/data/kickoff/search-tab-left.png b/kicker/data/kickoff/search-tab-left.png
index 507b41767..a13d4cea1 100644
--- a/kicker/data/kickoff/search-tab-left.png
+++ b/kicker/data/kickoff/search-tab-left.png
Binary files differ
diff --git a/kicker/data/kickoff/search-tab-right.png b/kicker/data/kickoff/search-tab-right.png
index 94a410443..e774a8bde 100644
--- a/kicker/data/kickoff/search-tab-right.png
+++ b/kicker/data/kickoff/search-tab-right.png
Binary files differ
diff --git a/kicker/data/kickoff/search-tab-top-center.png b/kicker/data/kickoff/search-tab-top-center.png
index 51482ad23..5000605f8 100644
--- a/kicker/data/kickoff/search-tab-top-center.png
+++ b/kicker/data/kickoff/search-tab-top-center.png
Binary files differ
diff --git a/kicker/data/kickoff/search-tab-top-left.png b/kicker/data/kickoff/search-tab-top-left.png
index 97264782a..9eddc5ea4 100644
--- a/kicker/data/kickoff/search-tab-top-left.png
+++ b/kicker/data/kickoff/search-tab-top-left.png
Binary files differ
diff --git a/kicker/data/kickoff/search-tab-top-right.png b/kicker/data/kickoff/search-tab-top-right.png
index fc80f40c2..f23658928 100644
--- a/kicker/data/kickoff/search-tab-top-right.png
+++ b/kicker/data/kickoff/search-tab-top-right.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-bottom-left-topdown.png b/kicker/data/kickoff/tab-bottom-left-topdown.png
index a96a7bf12..96428a509 100644
--- a/kicker/data/kickoff/tab-bottom-left-topdown.png
+++ b/kicker/data/kickoff/tab-bottom-left-topdown.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-bottom-right-topdown.png b/kicker/data/kickoff/tab-bottom-right-topdown.png
index d1d80a6b3..54c8c12f3 100644
--- a/kicker/data/kickoff/tab-bottom-right-topdown.png
+++ b/kicker/data/kickoff/tab-bottom-right-topdown.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-bottom-right.png b/kicker/data/kickoff/tab-bottom-right.png
index 86d226b51..f3bd6a9c9 100644
--- a/kicker/data/kickoff/tab-bottom-right.png
+++ b/kicker/data/kickoff/tab-bottom-right.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-center-topdown.png b/kicker/data/kickoff/tab-center-topdown.png
index c35438d91..c94d74d66 100644
--- a/kicker/data/kickoff/tab-center-topdown.png
+++ b/kicker/data/kickoff/tab-center-topdown.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-center.png b/kicker/data/kickoff/tab-center.png
index 0ef1f6d34..00ed99525 100644
--- a/kicker/data/kickoff/tab-center.png
+++ b/kicker/data/kickoff/tab-center.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-left_center.png b/kicker/data/kickoff/tab-left_center.png
index 4c8c39794..9fc26b72c 100644
--- a/kicker/data/kickoff/tab-left_center.png
+++ b/kicker/data/kickoff/tab-left_center.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-right_center.png b/kicker/data/kickoff/tab-right_center.png
index 3df6564f4..e1048e772 100644
--- a/kicker/data/kickoff/tab-right_center.png
+++ b/kicker/data/kickoff/tab-right_center.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-top-left-topdown.png b/kicker/data/kickoff/tab-top-left-topdown.png
index 3df580e1d..bad9595a9 100644
--- a/kicker/data/kickoff/tab-top-left-topdown.png
+++ b/kicker/data/kickoff/tab-top-left-topdown.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-top-left.png b/kicker/data/kickoff/tab-top-left.png
index 910967a18..34376ddf3 100644
--- a/kicker/data/kickoff/tab-top-left.png
+++ b/kicker/data/kickoff/tab-top-left.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-top-right-topdown.png b/kicker/data/kickoff/tab-top-right-topdown.png
index dd672cad9..5c9cbe4a8 100644
--- a/kicker/data/kickoff/tab-top-right-topdown.png
+++ b/kicker/data/kickoff/tab-top-right-topdown.png
Binary files differ
diff --git a/kicker/data/kickoff/tab-top-right.png b/kicker/data/kickoff/tab-top-right.png
index e96019d6d..a1eed6fc9 100644
--- a/kicker/data/kickoff/tab-top-right.png
+++ b/kicker/data/kickoff/tab-top-right.png
Binary files differ
diff --git a/kicker/data/kmenu_side/kside.png b/kicker/data/kmenu_side/kside.png
index 8ae29c175..dc07a0570 100644
--- a/kicker/data/kmenu_side/kside.png
+++ b/kicker/data/kmenu_side/kside.png
Binary files differ
diff --git a/kicker/data/kmenu_side/kside_top_left.png b/kicker/data/kmenu_side/kside_top_left.png
index 38a527aef..9f7632484 100644
--- a/kicker/data/kmenu_side/kside_top_left.png
+++ b/kicker/data/kmenu_side/kside_top_left.png
Binary files differ
diff --git a/kicker/data/kmenu_side/kside_top_right.png b/kicker/data/kmenu_side/kside_top_right.png
index d6ea97fd9..464f2998e 100644
--- a/kicker/data/kmenu_side/kside_top_right.png
+++ b/kicker/data/kmenu_side/kside_top_right.png
Binary files differ
diff --git a/kicker/data/kmenu_side/kside_top_tile.png b/kicker/data/kmenu_side/kside_top_tile.png
index 08ddb6712..6bd44ee00 100644
--- a/kicker/data/kmenu_side/kside_top_tile.png
+++ b/kicker/data/kmenu_side/kside_top_tile.png
Binary files differ
diff --git a/kicker/data/tiles/KDE_button_large_down.png b/kicker/data/tiles/KDE_button_large_down.png
index 726095c45..35b9067d0 100644
--- a/kicker/data/tiles/KDE_button_large_down.png
+++ b/kicker/data/tiles/KDE_button_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/KDE_button_large_up.png b/kicker/data/tiles/KDE_button_large_up.png
index 83a540f85..f8be4e3c1 100644
--- a/kicker/data/tiles/KDE_button_large_up.png
+++ b/kicker/data/tiles/KDE_button_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/KDE_button_normal_down.png b/kicker/data/tiles/KDE_button_normal_down.png
index 35a848bf7..b3ddbfb04 100644
--- a/kicker/data/tiles/KDE_button_normal_down.png
+++ b/kicker/data/tiles/KDE_button_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/KDE_button_normal_up.png b/kicker/data/tiles/KDE_button_normal_up.png
index 304940fb1..4102f1c95 100644
--- a/kicker/data/tiles/KDE_button_normal_up.png
+++ b/kicker/data/tiles/KDE_button_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/KDE_button_tiny_down.png b/kicker/data/tiles/KDE_button_tiny_down.png
index 356d4498b..d879b1a2d 100644
--- a/kicker/data/tiles/KDE_button_tiny_down.png
+++ b/kicker/data/tiles/KDE_button_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/KDE_button_tiny_up.png b/kicker/data/tiles/KDE_button_tiny_up.png
index aec67c344..e005948a7 100644
--- a/kicker/data/tiles/KDE_button_tiny_up.png
+++ b/kicker/data/tiles/KDE_button_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/blue_wood_large_down.png b/kicker/data/tiles/blue_wood_large_down.png
index 576ad41e6..8f140fbf8 100644
--- a/kicker/data/tiles/blue_wood_large_down.png
+++ b/kicker/data/tiles/blue_wood_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/blue_wood_large_up.png b/kicker/data/tiles/blue_wood_large_up.png
index f82f9f291..661a20716 100644
--- a/kicker/data/tiles/blue_wood_large_up.png
+++ b/kicker/data/tiles/blue_wood_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/blue_wood_normal_down.png b/kicker/data/tiles/blue_wood_normal_down.png
index 8ba8e91cf..a0f338fe5 100644
--- a/kicker/data/tiles/blue_wood_normal_down.png
+++ b/kicker/data/tiles/blue_wood_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/blue_wood_normal_up.png b/kicker/data/tiles/blue_wood_normal_up.png
index 9ba633c5f..f146b305a 100644
--- a/kicker/data/tiles/blue_wood_normal_up.png
+++ b/kicker/data/tiles/blue_wood_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/blue_wood_tiny_down.png b/kicker/data/tiles/blue_wood_tiny_down.png
index 0a034c005..343c12a92 100644
--- a/kicker/data/tiles/blue_wood_tiny_down.png
+++ b/kicker/data/tiles/blue_wood_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/blue_wood_tiny_up.png b/kicker/data/tiles/blue_wood_tiny_up.png
index 37bafb97f..592076385 100644
--- a/kicker/data/tiles/blue_wood_tiny_up.png
+++ b/kicker/data/tiles/blue_wood_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/green_wood_large_down.png b/kicker/data/tiles/green_wood_large_down.png
index 0601d563a..050e74542 100644
--- a/kicker/data/tiles/green_wood_large_down.png
+++ b/kicker/data/tiles/green_wood_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/green_wood_large_up.png b/kicker/data/tiles/green_wood_large_up.png
index f48f6a256..739df3406 100644
--- a/kicker/data/tiles/green_wood_large_up.png
+++ b/kicker/data/tiles/green_wood_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/green_wood_normal_down.png b/kicker/data/tiles/green_wood_normal_down.png
index 10163ed80..7ba0a7f2d 100644
--- a/kicker/data/tiles/green_wood_normal_down.png
+++ b/kicker/data/tiles/green_wood_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/green_wood_normal_up.png b/kicker/data/tiles/green_wood_normal_up.png
index 479a3544c..417697feb 100644
--- a/kicker/data/tiles/green_wood_normal_up.png
+++ b/kicker/data/tiles/green_wood_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/green_wood_tiny_down.png b/kicker/data/tiles/green_wood_tiny_down.png
index aa026aaed..c451246a1 100644
--- a/kicker/data/tiles/green_wood_tiny_down.png
+++ b/kicker/data/tiles/green_wood_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/green_wood_tiny_up.png b/kicker/data/tiles/green_wood_tiny_up.png
index ff6d6885a..c94e14088 100644
--- a/kicker/data/tiles/green_wood_tiny_up.png
+++ b/kicker/data/tiles/green_wood_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_gray_large_down.png b/kicker/data/tiles/light_gray_large_down.png
index c73e8196f..3b24ada26 100644
--- a/kicker/data/tiles/light_gray_large_down.png
+++ b/kicker/data/tiles/light_gray_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_gray_large_up.png b/kicker/data/tiles/light_gray_large_up.png
index 88f4055be..f9685d657 100644
--- a/kicker/data/tiles/light_gray_large_up.png
+++ b/kicker/data/tiles/light_gray_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_gray_normal_up.png b/kicker/data/tiles/light_gray_normal_up.png
index cec9a04b1..4da0c04fb 100644
--- a/kicker/data/tiles/light_gray_normal_up.png
+++ b/kicker/data/tiles/light_gray_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_gray_tiny_down.png b/kicker/data/tiles/light_gray_tiny_down.png
index e462814e5..b5a00ae1b 100644
--- a/kicker/data/tiles/light_gray_tiny_down.png
+++ b/kicker/data/tiles/light_gray_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_gray_tiny_up.png b/kicker/data/tiles/light_gray_tiny_up.png
index 39a2b7017..a79a09776 100644
--- a/kicker/data/tiles/light_gray_tiny_up.png
+++ b/kicker/data/tiles/light_gray_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_green_large_down.png b/kicker/data/tiles/light_green_large_down.png
index e5c556b9e..3c3179a7d 100644
--- a/kicker/data/tiles/light_green_large_down.png
+++ b/kicker/data/tiles/light_green_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_green_large_up.png b/kicker/data/tiles/light_green_large_up.png
index 20c45b134..2c656dfc4 100644
--- a/kicker/data/tiles/light_green_large_up.png
+++ b/kicker/data/tiles/light_green_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_green_normal_down.png b/kicker/data/tiles/light_green_normal_down.png
index 1aecad3eb..a19f53314 100644
--- a/kicker/data/tiles/light_green_normal_down.png
+++ b/kicker/data/tiles/light_green_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_green_normal_up.png b/kicker/data/tiles/light_green_normal_up.png
index d3947b32a..f77002536 100644
--- a/kicker/data/tiles/light_green_normal_up.png
+++ b/kicker/data/tiles/light_green_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_green_tiny_down.png b/kicker/data/tiles/light_green_tiny_down.png
index 910bcf8f6..ddecf0954 100644
--- a/kicker/data/tiles/light_green_tiny_down.png
+++ b/kicker/data/tiles/light_green_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_green_tiny_up.png b/kicker/data/tiles/light_green_tiny_up.png
index 98194ff3f..40988bf31 100644
--- a/kicker/data/tiles/light_green_tiny_up.png
+++ b/kicker/data/tiles/light_green_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_pastel_large_down.png b/kicker/data/tiles/light_pastel_large_down.png
index 1a542f814..36b0db882 100644
--- a/kicker/data/tiles/light_pastel_large_down.png
+++ b/kicker/data/tiles/light_pastel_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_pastel_large_up.png b/kicker/data/tiles/light_pastel_large_up.png
index b920125df..92e2247e4 100644
--- a/kicker/data/tiles/light_pastel_large_up.png
+++ b/kicker/data/tiles/light_pastel_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_pastel_normal_up.png b/kicker/data/tiles/light_pastel_normal_up.png
index a7840d3a8..06c0ce637 100644
--- a/kicker/data/tiles/light_pastel_normal_up.png
+++ b/kicker/data/tiles/light_pastel_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_pastel_tiny_down.png b/kicker/data/tiles/light_pastel_tiny_down.png
index 85af54c59..7d57d466f 100644
--- a/kicker/data/tiles/light_pastel_tiny_down.png
+++ b/kicker/data/tiles/light_pastel_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_pastel_tiny_up.png b/kicker/data/tiles/light_pastel_tiny_up.png
index 9267620f3..875740e0e 100644
--- a/kicker/data/tiles/light_pastel_tiny_up.png
+++ b/kicker/data/tiles/light_pastel_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_purple_large_down.png b/kicker/data/tiles/light_purple_large_down.png
index 0246b87c4..1245e6de3 100644
--- a/kicker/data/tiles/light_purple_large_down.png
+++ b/kicker/data/tiles/light_purple_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_purple_large_up.png b/kicker/data/tiles/light_purple_large_up.png
index 4ef4b9746..49f4de017 100644
--- a/kicker/data/tiles/light_purple_large_up.png
+++ b/kicker/data/tiles/light_purple_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_purple_normal_down.png b/kicker/data/tiles/light_purple_normal_down.png
index 858e2cda5..eb84290a8 100644
--- a/kicker/data/tiles/light_purple_normal_down.png
+++ b/kicker/data/tiles/light_purple_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_purple_normal_up.png b/kicker/data/tiles/light_purple_normal_up.png
index c064e1827..3d0806dca 100644
--- a/kicker/data/tiles/light_purple_normal_up.png
+++ b/kicker/data/tiles/light_purple_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/light_purple_tiny_down.png b/kicker/data/tiles/light_purple_tiny_down.png
index 8a44988d4..f7657784e 100644
--- a/kicker/data/tiles/light_purple_tiny_down.png
+++ b/kicker/data/tiles/light_purple_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/light_purple_tiny_up.png b/kicker/data/tiles/light_purple_tiny_up.png
index 9a8af02cc..5d9982292 100644
--- a/kicker/data/tiles/light_purple_tiny_up.png
+++ b/kicker/data/tiles/light_purple_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/nuts_and_bolts_large_down.png b/kicker/data/tiles/nuts_and_bolts_large_down.png
index 120a63d78..9d378e856 100644
--- a/kicker/data/tiles/nuts_and_bolts_large_down.png
+++ b/kicker/data/tiles/nuts_and_bolts_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/nuts_and_bolts_large_up.png b/kicker/data/tiles/nuts_and_bolts_large_up.png
index 42713ed07..c18956486 100644
--- a/kicker/data/tiles/nuts_and_bolts_large_up.png
+++ b/kicker/data/tiles/nuts_and_bolts_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/nuts_and_bolts_normal_down.png b/kicker/data/tiles/nuts_and_bolts_normal_down.png
index f7ddb9ff9..bcad75618 100644
--- a/kicker/data/tiles/nuts_and_bolts_normal_down.png
+++ b/kicker/data/tiles/nuts_and_bolts_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/nuts_and_bolts_normal_up.png b/kicker/data/tiles/nuts_and_bolts_normal_up.png
index b8252631c..2f3eee734 100644
--- a/kicker/data/tiles/nuts_and_bolts_normal_up.png
+++ b/kicker/data/tiles/nuts_and_bolts_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/nuts_and_bolts_tiny_down.png b/kicker/data/tiles/nuts_and_bolts_tiny_down.png
index 97a990cb9..0d537bb61 100644
--- a/kicker/data/tiles/nuts_and_bolts_tiny_down.png
+++ b/kicker/data/tiles/nuts_and_bolts_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/nuts_and_bolts_tiny_up.png b/kicker/data/tiles/nuts_and_bolts_tiny_up.png
index 63e962c02..8eb7433f3 100644
--- a/kicker/data/tiles/nuts_and_bolts_tiny_up.png
+++ b/kicker/data/tiles/nuts_and_bolts_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/red_wood_large_down.png b/kicker/data/tiles/red_wood_large_down.png
index c066f1d94..550b36756 100644
--- a/kicker/data/tiles/red_wood_large_down.png
+++ b/kicker/data/tiles/red_wood_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/red_wood_large_up.png b/kicker/data/tiles/red_wood_large_up.png
index 646bb9c54..d8137634e 100644
--- a/kicker/data/tiles/red_wood_large_up.png
+++ b/kicker/data/tiles/red_wood_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/red_wood_normal_down.png b/kicker/data/tiles/red_wood_normal_down.png
index 6091a488a..e9dd9c3a6 100644
--- a/kicker/data/tiles/red_wood_normal_down.png
+++ b/kicker/data/tiles/red_wood_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/red_wood_normal_up.png b/kicker/data/tiles/red_wood_normal_up.png
index 805f19a1d..51f4c3342 100644
--- a/kicker/data/tiles/red_wood_normal_up.png
+++ b/kicker/data/tiles/red_wood_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/red_wood_tiny_down.png b/kicker/data/tiles/red_wood_tiny_down.png
index 6a2b31ee0..8b81c17b9 100644
--- a/kicker/data/tiles/red_wood_tiny_down.png
+++ b/kicker/data/tiles/red_wood_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/red_wood_tiny_up.png b/kicker/data/tiles/red_wood_tiny_up.png
index c2eb24b41..fdd3d8a30 100644
--- a/kicker/data/tiles/red_wood_tiny_up.png
+++ b/kicker/data/tiles/red_wood_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_blue_large_down.png b/kicker/data/tiles/solid_blue_large_down.png
index 81f4f5391..60d755ef0 100644
--- a/kicker/data/tiles/solid_blue_large_down.png
+++ b/kicker/data/tiles/solid_blue_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_blue_large_up.png b/kicker/data/tiles/solid_blue_large_up.png
index b815150cb..b66b1e0e7 100644
--- a/kicker/data/tiles/solid_blue_large_up.png
+++ b/kicker/data/tiles/solid_blue_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_blue_normal_down.png b/kicker/data/tiles/solid_blue_normal_down.png
index 8fe6caea0..8ce15b4d5 100644
--- a/kicker/data/tiles/solid_blue_normal_down.png
+++ b/kicker/data/tiles/solid_blue_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_blue_normal_up.png b/kicker/data/tiles/solid_blue_normal_up.png
index 54dce1c53..9e89fd9c1 100644
--- a/kicker/data/tiles/solid_blue_normal_up.png
+++ b/kicker/data/tiles/solid_blue_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_blue_tiny_down.png b/kicker/data/tiles/solid_blue_tiny_down.png
index c4a7559e8..7263838c8 100644
--- a/kicker/data/tiles/solid_blue_tiny_down.png
+++ b/kicker/data/tiles/solid_blue_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_blue_tiny_up.png b/kicker/data/tiles/solid_blue_tiny_up.png
index c6ad68fb2..912779e13 100644
--- a/kicker/data/tiles/solid_blue_tiny_up.png
+++ b/kicker/data/tiles/solid_blue_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_gray_large_down.png b/kicker/data/tiles/solid_gray_large_down.png
index b90ea5edf..f0e77d547 100644
--- a/kicker/data/tiles/solid_gray_large_down.png
+++ b/kicker/data/tiles/solid_gray_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_gray_large_up.png b/kicker/data/tiles/solid_gray_large_up.png
index 221c70060..1d72e1020 100644
--- a/kicker/data/tiles/solid_gray_large_up.png
+++ b/kicker/data/tiles/solid_gray_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_gray_normal_down.png b/kicker/data/tiles/solid_gray_normal_down.png
index 80418d7dd..b5c667900 100644
--- a/kicker/data/tiles/solid_gray_normal_down.png
+++ b/kicker/data/tiles/solid_gray_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_gray_normal_up.png b/kicker/data/tiles/solid_gray_normal_up.png
index ecd4809f2..f442d04f2 100644
--- a/kicker/data/tiles/solid_gray_normal_up.png
+++ b/kicker/data/tiles/solid_gray_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_gray_tiny_down.png b/kicker/data/tiles/solid_gray_tiny_down.png
index a230fd0b8..6a4b695c5 100644
--- a/kicker/data/tiles/solid_gray_tiny_down.png
+++ b/kicker/data/tiles/solid_gray_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_gray_tiny_up.png b/kicker/data/tiles/solid_gray_tiny_up.png
index 24896cc7d..fd9ee6790 100644
--- a/kicker/data/tiles/solid_gray_tiny_up.png
+++ b/kicker/data/tiles/solid_gray_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_green_large_down.png b/kicker/data/tiles/solid_green_large_down.png
index d5797dc47..104c4c3b3 100644
--- a/kicker/data/tiles/solid_green_large_down.png
+++ b/kicker/data/tiles/solid_green_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_green_large_up.png b/kicker/data/tiles/solid_green_large_up.png
index 09075cfb8..60ec37ff7 100644
--- a/kicker/data/tiles/solid_green_large_up.png
+++ b/kicker/data/tiles/solid_green_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_green_normal_down.png b/kicker/data/tiles/solid_green_normal_down.png
index 8756acbe6..b9a1b65db 100644
--- a/kicker/data/tiles/solid_green_normal_down.png
+++ b/kicker/data/tiles/solid_green_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_green_normal_up.png b/kicker/data/tiles/solid_green_normal_up.png
index 8fd958039..7b6569603 100644
--- a/kicker/data/tiles/solid_green_normal_up.png
+++ b/kicker/data/tiles/solid_green_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_green_tiny_down.png b/kicker/data/tiles/solid_green_tiny_down.png
index 6d3807e5b..d49cabeb7 100644
--- a/kicker/data/tiles/solid_green_tiny_down.png
+++ b/kicker/data/tiles/solid_green_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_green_tiny_up.png b/kicker/data/tiles/solid_green_tiny_up.png
index 98245a2c5..35ba32800 100644
--- a/kicker/data/tiles/solid_green_tiny_up.png
+++ b/kicker/data/tiles/solid_green_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_orange_large_down.png b/kicker/data/tiles/solid_orange_large_down.png
index 00ee670da..7daf9eb04 100644
--- a/kicker/data/tiles/solid_orange_large_down.png
+++ b/kicker/data/tiles/solid_orange_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_orange_large_up.png b/kicker/data/tiles/solid_orange_large_up.png
index a301c985e..50200bf9d 100644
--- a/kicker/data/tiles/solid_orange_large_up.png
+++ b/kicker/data/tiles/solid_orange_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_orange_normal_down.png b/kicker/data/tiles/solid_orange_normal_down.png
index 447d425d0..d9c4793ee 100644
--- a/kicker/data/tiles/solid_orange_normal_down.png
+++ b/kicker/data/tiles/solid_orange_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_orange_normal_up.png b/kicker/data/tiles/solid_orange_normal_up.png
index 666395837..5e1350ee7 100644
--- a/kicker/data/tiles/solid_orange_normal_up.png
+++ b/kicker/data/tiles/solid_orange_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_orange_tiny_down.png b/kicker/data/tiles/solid_orange_tiny_down.png
index be5e4b1ec..c5332ff6d 100644
--- a/kicker/data/tiles/solid_orange_tiny_down.png
+++ b/kicker/data/tiles/solid_orange_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_orange_tiny_up.png b/kicker/data/tiles/solid_orange_tiny_up.png
index 4b3217397..f3be3895d 100644
--- a/kicker/data/tiles/solid_orange_tiny_up.png
+++ b/kicker/data/tiles/solid_orange_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_pastel_large_down.png b/kicker/data/tiles/solid_pastel_large_down.png
index fde6462e8..f04438101 100644
--- a/kicker/data/tiles/solid_pastel_large_down.png
+++ b/kicker/data/tiles/solid_pastel_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_pastel_large_up.png b/kicker/data/tiles/solid_pastel_large_up.png
index 191522e59..d56853b70 100644
--- a/kicker/data/tiles/solid_pastel_large_up.png
+++ b/kicker/data/tiles/solid_pastel_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_pastel_normal_down.png b/kicker/data/tiles/solid_pastel_normal_down.png
index caf2c287e..f29c9fdc8 100644
--- a/kicker/data/tiles/solid_pastel_normal_down.png
+++ b/kicker/data/tiles/solid_pastel_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_pastel_normal_up.png b/kicker/data/tiles/solid_pastel_normal_up.png
index 7c7a1efd0..7ea683b33 100644
--- a/kicker/data/tiles/solid_pastel_normal_up.png
+++ b/kicker/data/tiles/solid_pastel_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_pastel_tiny_down.png b/kicker/data/tiles/solid_pastel_tiny_down.png
index 5ac0212cc..66bb8dcc3 100644
--- a/kicker/data/tiles/solid_pastel_tiny_down.png
+++ b/kicker/data/tiles/solid_pastel_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_pastel_tiny_up.png b/kicker/data/tiles/solid_pastel_tiny_up.png
index 52078b2b5..df6ec5ae5 100644
--- a/kicker/data/tiles/solid_pastel_tiny_up.png
+++ b/kicker/data/tiles/solid_pastel_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_purple_large_down.png b/kicker/data/tiles/solid_purple_large_down.png
index af85fb076..87c14ce38 100644
--- a/kicker/data/tiles/solid_purple_large_down.png
+++ b/kicker/data/tiles/solid_purple_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_purple_large_up.png b/kicker/data/tiles/solid_purple_large_up.png
index 12146c4cb..460c46ee2 100644
--- a/kicker/data/tiles/solid_purple_large_up.png
+++ b/kicker/data/tiles/solid_purple_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_purple_normal_down.png b/kicker/data/tiles/solid_purple_normal_down.png
index 80c14518e..803639721 100644
--- a/kicker/data/tiles/solid_purple_normal_down.png
+++ b/kicker/data/tiles/solid_purple_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_purple_normal_up.png b/kicker/data/tiles/solid_purple_normal_up.png
index 7682cd19b..277f8902d 100644
--- a/kicker/data/tiles/solid_purple_normal_up.png
+++ b/kicker/data/tiles/solid_purple_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_purple_tiny_down.png b/kicker/data/tiles/solid_purple_tiny_down.png
index 6badb34c1..053332724 100644
--- a/kicker/data/tiles/solid_purple_tiny_down.png
+++ b/kicker/data/tiles/solid_purple_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_purple_tiny_up.png b/kicker/data/tiles/solid_purple_tiny_up.png
index ce3dcfb05..7a1e64061 100644
--- a/kicker/data/tiles/solid_purple_tiny_up.png
+++ b/kicker/data/tiles/solid_purple_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_red_large_down.png b/kicker/data/tiles/solid_red_large_down.png
index 2ed284974..9f254d89d 100644
--- a/kicker/data/tiles/solid_red_large_down.png
+++ b/kicker/data/tiles/solid_red_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_red_large_up.png b/kicker/data/tiles/solid_red_large_up.png
index 35f60bb23..995e972f9 100644
--- a/kicker/data/tiles/solid_red_large_up.png
+++ b/kicker/data/tiles/solid_red_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_red_normal_down.png b/kicker/data/tiles/solid_red_normal_down.png
index 1d1069c31..e7cbe85d7 100644
--- a/kicker/data/tiles/solid_red_normal_down.png
+++ b/kicker/data/tiles/solid_red_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_red_normal_up.png b/kicker/data/tiles/solid_red_normal_up.png
index 87e08e59d..011143443 100644
--- a/kicker/data/tiles/solid_red_normal_up.png
+++ b/kicker/data/tiles/solid_red_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_red_tiny_down.png b/kicker/data/tiles/solid_red_tiny_down.png
index 722e872bc..33802daf2 100644
--- a/kicker/data/tiles/solid_red_tiny_down.png
+++ b/kicker/data/tiles/solid_red_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_red_tiny_up.png b/kicker/data/tiles/solid_red_tiny_up.png
index 82e086f58..020ecdd5b 100644
--- a/kicker/data/tiles/solid_red_tiny_up.png
+++ b/kicker/data/tiles/solid_red_tiny_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_tigereye_large_down.png b/kicker/data/tiles/solid_tigereye_large_down.png
index 118e6f85a..10c37c107 100644
--- a/kicker/data/tiles/solid_tigereye_large_down.png
+++ b/kicker/data/tiles/solid_tigereye_large_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_tigereye_large_up.png b/kicker/data/tiles/solid_tigereye_large_up.png
index e36984860..f451d98f4 100644
--- a/kicker/data/tiles/solid_tigereye_large_up.png
+++ b/kicker/data/tiles/solid_tigereye_large_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_tigereye_normal_down.png b/kicker/data/tiles/solid_tigereye_normal_down.png
index 43c805dd3..ac726563a 100644
--- a/kicker/data/tiles/solid_tigereye_normal_down.png
+++ b/kicker/data/tiles/solid_tigereye_normal_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_tigereye_normal_up.png b/kicker/data/tiles/solid_tigereye_normal_up.png
index c81466b53..f2466a286 100644
--- a/kicker/data/tiles/solid_tigereye_normal_up.png
+++ b/kicker/data/tiles/solid_tigereye_normal_up.png
Binary files differ
diff --git a/kicker/data/tiles/solid_tigereye_tiny_down.png b/kicker/data/tiles/solid_tigereye_tiny_down.png
index 0b5e242c8..757f7b0b2 100644
--- a/kicker/data/tiles/solid_tigereye_tiny_down.png
+++ b/kicker/data/tiles/solid_tigereye_tiny_down.png
Binary files differ
diff --git a/kicker/data/tiles/solid_tigereye_tiny_up.png b/kicker/data/tiles/solid_tigereye_tiny_up.png
index f086cc329..5ddffabfe 100644
--- a/kicker/data/tiles/solid_tigereye_tiny_up.png
+++ b/kicker/data/tiles/solid_tigereye_tiny_up.png
Binary files differ
diff --git a/kicker/data/wallpaper/deck_plate.png b/kicker/data/wallpaper/deck_plate.png
index f79be9c12..dd58df401 100644
--- a/kicker/data/wallpaper/deck_plate.png
+++ b/kicker/data/wallpaper/deck_plate.png
Binary files differ
diff --git a/kicker/data/wallpaper/default.png b/kicker/data/wallpaper/default.png
index 0c9c1810c..e1332641d 100644
--- a/kicker/data/wallpaper/default.png
+++ b/kicker/data/wallpaper/default.png
Binary files differ
diff --git a/kicker/data/wallpaper/green_line.png b/kicker/data/wallpaper/green_line.png
index 43a34599c..0554f8f4e 100644
--- a/kicker/data/wallpaper/green_line.png
+++ b/kicker/data/wallpaper/green_line.png
Binary files differ
diff --git a/kicker/data/wallpaper/rail.png b/kicker/data/wallpaper/rail.png
index 6b558cdba..3b20ccfb0 100644
--- a/kicker/data/wallpaper/rail.png
+++ b/kicker/data/wallpaper/rail.png
Binary files differ
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
index bff59bcae..51dcba6bb 100644
--- a/klipper/hi128-app-klipper.png
+++ b/klipper/hi128-app-klipper.png
Binary files differ
diff --git a/klipper/hi16-app-klipper.png b/klipper/hi16-app-klipper.png
index 2b1fbbafe..ea8c2337c 100644
--- a/klipper/hi16-app-klipper.png
+++ b/klipper/hi16-app-klipper.png
Binary files differ
diff --git a/klipper/hi22-app-klipper.png b/klipper/hi22-app-klipper.png
index 4044ab86f..a1b8ca89b 100644
--- a/klipper/hi22-app-klipper.png
+++ b/klipper/hi22-app-klipper.png
Binary files differ
diff --git a/klipper/hi32-app-klipper.png b/klipper/hi32-app-klipper.png
index e84fa7680..cdffa2db6 100644
--- a/klipper/hi32-app-klipper.png
+++ b/klipper/hi32-app-klipper.png
Binary files differ
diff --git a/klipper/hi48-app-klipper.png b/klipper/hi48-app-klipper.png
index e808a3c2d..aeb46281c 100644
--- a/klipper/hi48-app-klipper.png
+++ b/klipper/hi48-app-klipper.png
Binary files differ
diff --git a/klipper/hi64-app-klipper.png b/klipper/hi64-app-klipper.png
index 8d966f25d..4de252ed9 100644
--- a/klipper/hi64-app-klipper.png
+++ b/klipper/hi64-app-klipper.png
Binary files differ
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
index b121605f7..f614d640b 100644
--- a/kmenuedit/hi16-app-kmenuedit.png
+++ b/kmenuedit/hi16-app-kmenuedit.png
Binary files differ
diff --git a/kmenuedit/hi22-app-kmenuedit.png b/kmenuedit/hi22-app-kmenuedit.png
index 65509221a..cd4a84adf 100644
--- a/kmenuedit/hi22-app-kmenuedit.png
+++ b/kmenuedit/hi22-app-kmenuedit.png
Binary files differ
diff --git a/kmenuedit/hi32-app-kmenuedit.png b/kmenuedit/hi32-app-kmenuedit.png
index d1e532be1..8d04cf0e5 100644
--- a/kmenuedit/hi32-app-kmenuedit.png
+++ b/kmenuedit/hi32-app-kmenuedit.png
Binary files differ
diff --git a/kmenuedit/hi48-app-kmenuedit.png b/kmenuedit/hi48-app-kmenuedit.png
index e6b483a7f..d988e912f 100644
--- a/kmenuedit/hi48-app-kmenuedit.png
+++ b/kmenuedit/hi48-app-kmenuedit.png
Binary files differ
diff --git a/kmenuedit/pixmaps/cr22-action-filesave_and_close.png b/kmenuedit/pixmaps/cr22-action-filesave_and_close.png
index 7d4b6f365..38ced989c 100644
--- a/kmenuedit/pixmaps/cr22-action-filesave_and_close.png
+++ b/kmenuedit/pixmaps/cr22-action-filesave_and_close.png
Binary files differ
diff --git a/kmenuedit/pixmaps/cr22-action-menu_new.png b/kmenuedit/pixmaps/cr22-action-menu_new.png
index 56613f41c..4399e125f 100644
--- a/kmenuedit/pixmaps/cr22-action-menu_new.png
+++ b/kmenuedit/pixmaps/cr22-action-menu_new.png
Binary files differ
diff --git a/kmenuedit/pixmaps/cr22-action-menu_new_sep.png b/kmenuedit/pixmaps/cr22-action-menu_new_sep.png
index bff0ce6d0..e16aca368 100644
--- a/kmenuedit/pixmaps/cr22-action-menu_new_sep.png
+++ b/kmenuedit/pixmaps/cr22-action-menu_new_sep.png
Binary files differ
diff --git a/kmenuedit/pixmaps/cr32-action-menu_new.png b/kmenuedit/pixmaps/cr32-action-menu_new.png
index d1e532be1..8d04cf0e5 100644
--- a/kmenuedit/pixmaps/cr32-action-menu_new.png
+++ b/kmenuedit/pixmaps/cr32-action-menu_new.png
Binary files differ
diff --git a/kmenuedit/pixmaps/cr32-action-menu_new_sep.png b/kmenuedit/pixmaps/cr32-action-menu_new_sep.png
index ff02e1d2b..fcb79e70e 100644
--- a/kmenuedit/pixmaps/cr32-action-menu_new_sep.png
+++ b/kmenuedit/pixmaps/cr32-action-menu_new_sep.png
Binary files differ
diff --git a/kmenuedit/pixmaps/lo16-action-menu_new.png b/kmenuedit/pixmaps/lo16-action-menu_new.png
index b121605f7..f614d640b 100644
--- a/kmenuedit/pixmaps/lo16-action-menu_new.png
+++ b/kmenuedit/pixmaps/lo16-action-menu_new.png
Binary files differ
diff --git a/knetattach/hi128-app-knetattach.png b/knetattach/hi128-app-knetattach.png
index 9fb0d1fb2..131b29915 100644
--- a/knetattach/hi128-app-knetattach.png
+++ b/knetattach/hi128-app-knetattach.png
Binary files differ
diff --git a/knetattach/hi16-app-knetattach.png b/knetattach/hi16-app-knetattach.png
index 3c5dbdf05..52db3b0ca 100644
--- a/knetattach/hi16-app-knetattach.png
+++ b/knetattach/hi16-app-knetattach.png
Binary files differ
diff --git a/knetattach/hi22-app-knetattach.png b/knetattach/hi22-app-knetattach.png
index eb61b0f3b..f69ffae6b 100644
--- a/knetattach/hi22-app-knetattach.png
+++ b/knetattach/hi22-app-knetattach.png
Binary files differ
diff --git a/knetattach/hi32-app-knetattach.png b/knetattach/hi32-app-knetattach.png
index a3ee15c4a..48e64e069 100644
--- a/knetattach/hi32-app-knetattach.png
+++ b/knetattach/hi32-app-knetattach.png
Binary files differ
diff --git a/knetattach/hi48-app-knetattach.png b/knetattach/hi48-app-knetattach.png
index 76e8f92f5..b6bc33930 100644
--- a/knetattach/hi48-app-knetattach.png
+++ b/knetattach/hi48-app-knetattach.png
Binary files differ
diff --git a/knetattach/hi64-app-knetattach.png b/knetattach/hi64-app-knetattach.png
index 839300b99..36d93079b 100644
--- a/knetattach/hi64-app-knetattach.png
+++ b/knetattach/hi64-app-knetattach.png
Binary files differ
diff --git a/konqueror/about/box-centre-konqueror.png b/konqueror/about/box-centre-konqueror.png
index d8dde840f..aeeb11625 100755..100644
--- a/konqueror/about/box-centre-konqueror.png
+++ b/konqueror/about/box-centre-konqueror.png
Binary files differ
diff --git a/konqueror/about/lightning.png b/konqueror/about/lightning.png
index 40bfbcfbb..c0434fad5 100644
--- a/konqueror/about/lightning.png
+++ b/konqueror/about/lightning.png
Binary files differ
diff --git a/konqueror/about/top-right-konqueror.png b/konqueror/about/top-right-konqueror.png
index 453de1f6a..f685d4a3c 100644
--- a/konqueror/about/top-right-konqueror.png
+++ b/konqueror/about/top-right-konqueror.png
Binary files differ
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
index 6a3fc5efe..79b941ae5 100644
--- a/konqueror/keditbookmarks/cr16-app-keditbookmarks.png
+++ b/konqueror/keditbookmarks/cr16-app-keditbookmarks.png
Binary files differ
diff --git a/konqueror/keditbookmarks/cr32-app-keditbookmarks.png b/konqueror/keditbookmarks/cr32-app-keditbookmarks.png
index b7e10c47f..6515c682b 100644
--- a/konqueror/keditbookmarks/cr32-app-keditbookmarks.png
+++ b/konqueror/keditbookmarks/cr32-app-keditbookmarks.png
Binary files differ
diff --git a/konqueror/keditbookmarks/cr48-app-keditbookmarks.png b/konqueror/keditbookmarks/cr48-app-keditbookmarks.png
index d1f5e91cc..73f0dfd24 100644
--- a/konqueror/keditbookmarks/cr48-app-keditbookmarks.png
+++ b/konqueror/keditbookmarks/cr48-app-keditbookmarks.png
Binary files differ
diff --git a/konqueror/keditbookmarks/cr64-app-keditbookmarks.png b/konqueror/keditbookmarks/cr64-app-keditbookmarks.png
index 8f2504942..d1147a86d 100644
--- a/konqueror/keditbookmarks/cr64-app-keditbookmarks.png
+++ b/konqueror/keditbookmarks/cr64-app-keditbookmarks.png
Binary files differ
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
index 86a3d1237..55b79eedb 100644
--- a/konqueror/pics/actions/cr16-action-trinity1.png
+++ b/konqueror/pics/actions/cr16-action-trinity1.png
Binary files differ
diff --git a/konqueror/pics/actions/cr16-action-trinity2.png b/konqueror/pics/actions/cr16-action-trinity2.png
index 15bf0ae76..526ab9776 100644
--- a/konqueror/pics/actions/cr16-action-trinity2.png
+++ b/konqueror/pics/actions/cr16-action-trinity2.png
Binary files differ
diff --git a/konqueror/pics/actions/cr16-action-trinity3.png b/konqueror/pics/actions/cr16-action-trinity3.png
index 86a3d1237..55b79eedb 100644
--- a/konqueror/pics/actions/cr16-action-trinity3.png
+++ b/konqueror/pics/actions/cr16-action-trinity3.png
Binary files differ
diff --git a/konqueror/pics/actions/cr16-action-trinity4.png b/konqueror/pics/actions/cr16-action-trinity4.png
index 15bf0ae76..526ab9776 100644
--- a/konqueror/pics/actions/cr16-action-trinity4.png
+++ b/konqueror/pics/actions/cr16-action-trinity4.png
Binary files differ
diff --git a/konqueror/pics/actions/cr16-action-trinity5.png b/konqueror/pics/actions/cr16-action-trinity5.png
index 86a3d1237..55b79eedb 100644
--- a/konqueror/pics/actions/cr16-action-trinity5.png
+++ b/konqueror/pics/actions/cr16-action-trinity5.png
Binary files differ
diff --git a/konqueror/pics/actions/cr16-action-trinity6.png b/konqueror/pics/actions/cr16-action-trinity6.png
index 15bf0ae76..526ab9776 100644
--- a/konqueror/pics/actions/cr16-action-trinity6.png
+++ b/konqueror/pics/actions/cr16-action-trinity6.png
Binary files differ
diff --git a/konqueror/pics/hi128-app-konqueror.png b/konqueror/pics/hi128-app-konqueror.png
index c032a6e06..276f79cb8 100644
--- a/konqueror/pics/hi128-app-konqueror.png
+++ b/konqueror/pics/hi128-app-konqueror.png
Binary files differ
diff --git a/konqueror/pics/hi16-app-kfm.png b/konqueror/pics/hi16-app-kfm.png
index 4969259fc..1b46cc322 100644
--- a/konqueror/pics/hi16-app-kfm.png
+++ b/konqueror/pics/hi16-app-kfm.png
Binary files differ
diff --git a/konqueror/pics/hi16-app-konqueror.png b/konqueror/pics/hi16-app-konqueror.png
index 013f78bc4..9ba23b471 100644
--- a/konqueror/pics/hi16-app-konqueror.png
+++ b/konqueror/pics/hi16-app-konqueror.png
Binary files differ
diff --git a/konqueror/pics/hi22-app-konqueror.png b/konqueror/pics/hi22-app-konqueror.png
index 1413af913..eda89cf70 100644
--- a/konqueror/pics/hi22-app-konqueror.png
+++ b/konqueror/pics/hi22-app-konqueror.png
Binary files differ
diff --git a/konqueror/pics/hi32-app-kfm.png b/konqueror/pics/hi32-app-kfm.png
index 699c0ddd4..c15dbb83b 100644
--- a/konqueror/pics/hi32-app-kfm.png
+++ b/konqueror/pics/hi32-app-kfm.png
Binary files differ
diff --git a/konqueror/pics/hi32-app-konqueror.png b/konqueror/pics/hi32-app-konqueror.png
index ed21ceb5e..de0c8ecc7 100644
--- a/konqueror/pics/hi32-app-konqueror.png
+++ b/konqueror/pics/hi32-app-konqueror.png
Binary files differ
diff --git a/konqueror/pics/hi48-app-kfm.png b/konqueror/pics/hi48-app-kfm.png
index bb0b2a7f8..e345e15a1 100644
--- a/konqueror/pics/hi48-app-kfm.png
+++ b/konqueror/pics/hi48-app-kfm.png
Binary files differ
diff --git a/konqueror/pics/hi48-app-konqueror.png b/konqueror/pics/hi48-app-konqueror.png
index 11d84db32..91b48a468 100644
--- a/konqueror/pics/hi48-app-konqueror.png
+++ b/konqueror/pics/hi48-app-konqueror.png
Binary files differ
diff --git a/konqueror/pics/hi64-app-kfm.png b/konqueror/pics/hi64-app-kfm.png
index 4d2b58bcc..478510127 100644
--- a/konqueror/pics/hi64-app-kfm.png
+++ b/konqueror/pics/hi64-app-kfm.png
Binary files differ
diff --git a/konqueror/pics/hi64-app-konqueror.png b/konqueror/pics/hi64-app-konqueror.png
index 637751f61..9215cfe37 100644
--- a/konqueror/pics/hi64-app-konqueror.png
+++ b/konqueror/pics/hi64-app-konqueror.png
Binary files differ
diff --git a/konqueror/pics/indicators/indicator_connect.png b/konqueror/pics/indicators/indicator_connect.png
index feff45c6a..f089d424b 100644
--- a/konqueror/pics/indicators/indicator_connect.png
+++ b/konqueror/pics/indicators/indicator_connect.png
Binary files differ
diff --git a/konqueror/pics/indicators/indicator_empty.png b/konqueror/pics/indicators/indicator_empty.png
index dcb847550..449392dcc 100644
--- a/konqueror/pics/indicators/indicator_empty.png
+++ b/konqueror/pics/indicators/indicator_empty.png
Binary files differ
diff --git a/konqueror/pics/indicators/indicator_noconnect.png b/konqueror/pics/indicators/indicator_noconnect.png
index 5f14df0a0..fb8253fb1 100644
--- a/konqueror/pics/indicators/indicator_noconnect.png
+++ b/konqueror/pics/indicators/indicator_noconnect.png
Binary files differ
diff --git a/konqueror/pics/indicators/indicator_viewactive.png b/konqueror/pics/indicators/indicator_viewactive.png
index f8af065d8..ec5b78782 100644
--- a/konqueror/pics/indicators/indicator_viewactive.png
+++ b/konqueror/pics/indicators/indicator_viewactive.png
Binary files differ
diff --git a/konqueror/pics/tiles/bluemorning.png b/konqueror/pics/tiles/bluemorning.png
index 99a4945b2..9f0c52210 100644
--- a/konqueror/pics/tiles/bluemorning.png
+++ b/konqueror/pics/tiles/bluemorning.png
Binary files differ
diff --git a/konqueror/pics/tiles/canvas.png b/konqueror/pics/tiles/canvas.png
index 9dd8010a0..b4227ee71 100644
--- a/konqueror/pics/tiles/canvas.png
+++ b/konqueror/pics/tiles/canvas.png
Binary files differ
diff --git a/konqueror/pics/tiles/kde4ever.png b/konqueror/pics/tiles/kde4ever.png
index 0ff7b8e9a..7386433a9 100644
--- a/konqueror/pics/tiles/kde4ever.png
+++ b/konqueror/pics/tiles/kde4ever.png
Binary files differ
diff --git a/konqueror/pics/tiles/kenwimer.png b/konqueror/pics/tiles/kenwimer.png
index 7642a294e..760c810ca 100644
--- a/konqueror/pics/tiles/kenwimer.png
+++ b/konqueror/pics/tiles/kenwimer.png
Binary files differ
diff --git a/konqueror/pics/tiles/noise.png b/konqueror/pics/tiles/noise.png
index c39730093..ad17aef1f 100644
--- a/konqueror/pics/tiles/noise.png
+++ b/konqueror/pics/tiles/noise.png
Binary files differ
diff --git a/konqueror/pics/tiles/paper_flieder.png b/konqueror/pics/tiles/paper_flieder.png
index a1a014bab..85825a303 100644
--- a/konqueror/pics/tiles/paper_flieder.png
+++ b/konqueror/pics/tiles/paper_flieder.png
Binary files differ
diff --git a/konqueror/pics/tiles/redfiber.png b/konqueror/pics/tiles/redfiber.png
index 3618ca783..6e9f1a32a 100644
--- a/konqueror/pics/tiles/redfiber.png
+++ b/konqueror/pics/tiles/redfiber.png
Binary files differ
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
index a7f21faa5..4539203ff 100644
--- a/konsole/other/hi128-app-konsole.png
+++ b/konsole/other/hi128-app-konsole.png
Binary files differ
diff --git a/konsole/other/hi16-app-konsole.png b/konsole/other/hi16-app-konsole.png
index e4fabb297..249d8a553 100644
--- a/konsole/other/hi16-app-konsole.png
+++ b/konsole/other/hi16-app-konsole.png
Binary files differ
diff --git a/konsole/other/hi22-app-konsole.png b/konsole/other/hi22-app-konsole.png
index 9033d420f..197234c91 100644
--- a/konsole/other/hi22-app-konsole.png
+++ b/konsole/other/hi22-app-konsole.png
Binary files differ
diff --git a/konsole/other/hi32-app-konsole.png b/konsole/other/hi32-app-konsole.png
index 81b85b5c4..b1a2af965 100644
--- a/konsole/other/hi32-app-konsole.png
+++ b/konsole/other/hi32-app-konsole.png
Binary files differ
diff --git a/konsole/other/hi48-app-konsole.png b/konsole/other/hi48-app-konsole.png
index 97498f6d3..a2db33cd0 100644
--- a/konsole/other/hi48-app-konsole.png
+++ b/konsole/other/hi48-app-konsole.png
Binary files differ
diff --git a/konsole/other/hi64-app-konsole.png b/konsole/other/hi64-app-konsole.png
index 0b443d5ad..edb52329e 100644
--- a/konsole/other/hi64-app-konsole.png
+++ b/konsole/other/hi64-app-konsole.png
Binary files differ
diff --git a/konsole/other/icons/cr16-action-activity.png b/konsole/other/icons/cr16-action-activity.png
index 8d72794dd..502126dec 100644
--- a/konsole/other/icons/cr16-action-activity.png
+++ b/konsole/other/icons/cr16-action-activity.png
Binary files differ
diff --git a/konsole/other/icons/cr16-action-konsoleblue.png b/konsole/other/icons/cr16-action-konsoleblue.png
index eb53b8ece..7669299a7 100644
--- a/konsole/other/icons/cr16-action-konsoleblue.png
+++ b/konsole/other/icons/cr16-action-konsoleblue.png
Binary files differ
diff --git a/konsole/other/icons/cr16-action-konsolered.png b/konsole/other/icons/cr16-action-konsolered.png
index 7b8a66a00..d823890ea 100644
--- a/konsole/other/icons/cr16-action-konsolered.png
+++ b/konsole/other/icons/cr16-action-konsolered.png
Binary files differ
diff --git a/konsole/other/icons/cr16-action-opentermblue.png b/konsole/other/icons/cr16-action-opentermblue.png
index 36d9a28ff..dd5a5578e 100644
--- a/konsole/other/icons/cr16-action-opentermblue.png
+++ b/konsole/other/icons/cr16-action-opentermblue.png
Binary files differ
diff --git a/konsole/other/icons/cr16-action-opentermred.png b/konsole/other/icons/cr16-action-opentermred.png
index 49ff19fe3..13ea0a2c9 100644
--- a/konsole/other/icons/cr16-action-opentermred.png
+++ b/konsole/other/icons/cr16-action-opentermred.png
Binary files differ
diff --git a/konsole/other/icons/cr16-action-silence.png b/konsole/other/icons/cr16-action-silence.png
index a89226b3b..db8090abb 100644
--- a/konsole/other/icons/cr16-action-silence.png
+++ b/konsole/other/icons/cr16-action-silence.png
Binary files differ
diff --git a/konsole/other/icons/cr22-action-konsoleblue.png b/konsole/other/icons/cr22-action-konsoleblue.png
index 5c463804f..ede285965 100644
--- a/konsole/other/icons/cr22-action-konsoleblue.png
+++ b/konsole/other/icons/cr22-action-konsoleblue.png
Binary files differ
diff --git a/konsole/other/icons/cr22-action-konsolered.png b/konsole/other/icons/cr22-action-konsolered.png
index 2602d9842..873130fae 100644
--- a/konsole/other/icons/cr22-action-konsolered.png
+++ b/konsole/other/icons/cr22-action-konsolered.png
Binary files differ
diff --git a/konsole/other/icons/cr22-action-opentermblue.png b/konsole/other/icons/cr22-action-opentermblue.png
index 54051f6d5..813c9cfda 100644
--- a/konsole/other/icons/cr22-action-opentermblue.png
+++ b/konsole/other/icons/cr22-action-opentermblue.png
Binary files differ
diff --git a/konsole/other/icons/cr22-action-opentermred.png b/konsole/other/icons/cr22-action-opentermred.png
index a349d4376..e0edf6512 100644
--- a/konsole/other/icons/cr22-action-opentermred.png
+++ b/konsole/other/icons/cr22-action-opentermred.png
Binary files differ
diff --git a/konsole/other/icons/cr32-action-konsoleblue.png b/konsole/other/icons/cr32-action-konsoleblue.png
index 778cafb25..221aeb6da 100644
--- a/konsole/other/icons/cr32-action-konsoleblue.png
+++ b/konsole/other/icons/cr32-action-konsoleblue.png
Binary files differ
diff --git a/konsole/other/icons/cr32-action-konsolered.png b/konsole/other/icons/cr32-action-konsolered.png
index 6776c141d..3f4d5dd8a 100644
--- a/konsole/other/icons/cr32-action-konsolered.png
+++ b/konsole/other/icons/cr32-action-konsolered.png
Binary files differ
diff --git a/konsole/other/icons/cr32-action-opentermblue.png b/konsole/other/icons/cr32-action-opentermblue.png
index a394401dd..dedbe1a17 100644
--- a/konsole/other/icons/cr32-action-opentermblue.png
+++ b/konsole/other/icons/cr32-action-opentermblue.png
Binary files differ
diff --git a/konsole/other/icons/cr32-action-opentermred.png b/konsole/other/icons/cr32-action-opentermred.png
index e7e6134d2..892d93fa1 100644
--- a/konsole/other/icons/cr32-action-opentermred.png
+++ b/konsole/other/icons/cr32-action-opentermred.png
Binary files differ
diff --git a/konsole/other/wallpapers/Metric-Monospace-14.png b/konsole/other/wallpapers/Metric-Monospace-14.png
index 2cdb9eedf..73e52d634 100644
--- a/konsole/other/wallpapers/Metric-Monospace-14.png
+++ b/konsole/other/wallpapers/Metric-Monospace-14.png
Binary files differ
diff --git a/kpager/hi16-app-kpager.png b/kpager/hi16-app-kpager.png
index b58c33643..442447e64 100644
--- a/kpager/hi16-app-kpager.png
+++ b/kpager/hi16-app-kpager.png
Binary files differ
diff --git a/kpager/hi22-app-kpager.png b/kpager/hi22-app-kpager.png
index f549d927b..196675093 100644
--- a/kpager/hi22-app-kpager.png
+++ b/kpager/hi22-app-kpager.png
Binary files differ
diff --git a/kpager/hi32-app-kpager.png b/kpager/hi32-app-kpager.png
index 00e5c0c26..85a194dfe 100644
--- a/kpager/hi32-app-kpager.png
+++ b/kpager/hi32-app-kpager.png
Binary files differ
diff --git a/kpager/hi48-app-kpager.png b/kpager/hi48-app-kpager.png
index 529954009..c04a8bc34 100644
--- a/kpager/hi48-app-kpager.png
+++ b/kpager/hi48-app-kpager.png
Binary files differ
diff --git a/kpersonalizer/cr16-app-kpersonalizer.png b/kpersonalizer/cr16-app-kpersonalizer.png
index 86186d795..04c1dd14d 100644
--- a/kpersonalizer/cr16-app-kpersonalizer.png
+++ b/kpersonalizer/cr16-app-kpersonalizer.png
Binary files differ
diff --git a/kpersonalizer/cr32-app-kpersonalizer.png b/kpersonalizer/cr32-app-kpersonalizer.png
index cc3e98698..9e10e5223 100644
--- a/kpersonalizer/cr32-app-kpersonalizer.png
+++ b/kpersonalizer/cr32-app-kpersonalizer.png
Binary files differ
diff --git a/kpersonalizer/pics/step1.png b/kpersonalizer/pics/step1.png
index a71b74bfd..63a2eec66 100644
--- a/kpersonalizer/pics/step1.png
+++ b/kpersonalizer/pics/step1.png
Binary files differ
diff --git a/kpersonalizer/pics/step2.png b/kpersonalizer/pics/step2.png
index 647808f0c..a0320cd67 100644
--- a/kpersonalizer/pics/step2.png
+++ b/kpersonalizer/pics/step2.png
Binary files differ
diff --git a/kpersonalizer/pics/step3.png b/kpersonalizer/pics/step3.png
index 9d22cc8fa..ac9031dec 100644
--- a/kpersonalizer/pics/step3.png
+++ b/kpersonalizer/pics/step3.png
Binary files differ
diff --git a/kpersonalizer/pics/step4.png b/kpersonalizer/pics/step4.png
index dfeee7872..364dffc70 100644
--- a/kpersonalizer/pics/step4.png
+++ b/kpersonalizer/pics/step4.png
Binary files differ
diff --git a/kpersonalizer/pics/step5.png b/kpersonalizer/pics/step5.png
index 908c6a255..e6b6e790a 100644
--- a/kpersonalizer/pics/step5.png
+++ b/kpersonalizer/pics/step5.png
Binary files differ
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
index 956f6cc3d..7bedf5de6 100644
--- a/ksmserver/shutdown.png
+++ b/ksmserver/shutdown.png
Binary files differ
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
index 8442adc42..aab647bee 100644
--- a/ksmserver/shutdownkonq.png
+++ b/ksmserver/shutdownkonq.png
Binary files differ
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
index fe0be47ae..cc6604312 100644
--- a/ksplashml/kcmksplash/pics/hi128-app-ksplash.png
+++ b/ksplashml/kcmksplash/pics/hi128-app-ksplash.png
Binary files differ
diff --git a/ksplashml/kcmksplash/pics/hi16-app-ksplash.png b/ksplashml/kcmksplash/pics/hi16-app-ksplash.png
index cf1cbf3d1..1537b674f 100644
--- a/ksplashml/kcmksplash/pics/hi16-app-ksplash.png
+++ b/ksplashml/kcmksplash/pics/hi16-app-ksplash.png
Binary files differ
diff --git a/ksplashml/kcmksplash/pics/hi22-app-ksplash.png b/ksplashml/kcmksplash/pics/hi22-app-ksplash.png
index 66e74b5a0..511d6a810 100644
--- a/ksplashml/kcmksplash/pics/hi22-app-ksplash.png
+++ b/ksplashml/kcmksplash/pics/hi22-app-ksplash.png
Binary files differ
diff --git a/ksplashml/kcmksplash/pics/hi32-app-ksplash.png b/ksplashml/kcmksplash/pics/hi32-app-ksplash.png
index 353385a08..80991f4a5 100644
--- a/ksplashml/kcmksplash/pics/hi32-app-ksplash.png
+++ b/ksplashml/kcmksplash/pics/hi32-app-ksplash.png
Binary files differ
diff --git a/ksplashml/kcmksplash/pics/hi48-app-ksplash.png b/ksplashml/kcmksplash/pics/hi48-app-ksplash.png
index 441a75713..fcb7fa4b4 100644
--- a/ksplashml/kcmksplash/pics/hi48-app-ksplash.png
+++ b/ksplashml/kcmksplash/pics/hi48-app-ksplash.png
Binary files differ
diff --git a/ksplashml/kcmksplash/pics/hi64-app-ksplash.png b/ksplashml/kcmksplash/pics/hi64-app-ksplash.png
index 444b6b927..25d934b41 100644
--- a/ksplashml/kcmksplash/pics/hi64-app-ksplash.png
+++ b/ksplashml/kcmksplash/pics/hi64-app-ksplash.png
Binary files differ
diff --git a/ksplashml/pics/splash.png b/ksplashml/pics/splash.png
index 1e56bcb9b..399c2915a 100644
--- a/ksplashml/pics/splash.png
+++ b/ksplashml/pics/splash.png
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/Preview.png b/ksplashml/pics/themes/TDE-Classic/Preview.png
index 21a6b914f..4df2c8ccd 100644
--- a/ksplashml/pics/themes/TDE-Classic/Preview.png
+++ b/ksplashml/pics/themes/TDE-Classic/Preview.png
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/Preview.png b/ksplashml/pics/themes/TDE-Classic/locolor/Preview.png
index 21a6b914f..4df2c8ccd 100644
--- a/ksplashml/pics/themes/TDE-Classic/locolor/Preview.png
+++ b/ksplashml/pics/themes/TDE-Classic/locolor/Preview.png
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/splash_active_bar.png b/ksplashml/pics/themes/TDE-Classic/locolor/splash_active_bar.png
index 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
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.png b/ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.png
index 26c99f3af..cf4c012ab 100644
--- a/ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.png
+++ b/ksplashml/pics/themes/TDE-Classic/locolor/splash_bottom.png
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/splash_inactive_bar.png b/ksplashml/pics/themes/TDE-Classic/locolor/splash_inactive_bar.png
index 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
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/locolor/splash_top.png b/ksplashml/pics/themes/TDE-Classic/locolor/splash_top.png
index 52d5d32b7..f6cb70dfb 100644
--- a/ksplashml/pics/themes/TDE-Classic/locolor/splash_top.png
+++ b/ksplashml/pics/themes/TDE-Classic/locolor/splash_top.png
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/splash_active_bar.png b/ksplashml/pics/themes/TDE-Classic/splash_active_bar.png
index ed4c25f1e..747f2c510 100644
--- a/ksplashml/pics/themes/TDE-Classic/splash_active_bar.png
+++ b/ksplashml/pics/themes/TDE-Classic/splash_active_bar.png
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/splash_bottom.png b/ksplashml/pics/themes/TDE-Classic/splash_bottom.png
index ef5e14a58..8f17308a6 100644
--- a/ksplashml/pics/themes/TDE-Classic/splash_bottom.png
+++ b/ksplashml/pics/themes/TDE-Classic/splash_bottom.png
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.png b/ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.png
index c521c8c68..8957dc895 100644
--- a/ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.png
+++ b/ksplashml/pics/themes/TDE-Classic/splash_inactive_bar.png
Binary files differ
diff --git a/ksplashml/pics/themes/TDE-Classic/splash_top.png b/ksplashml/pics/themes/TDE-Classic/splash_top.png
index e0336c5aa..63e047d1d 100644
--- a/ksplashml/pics/themes/TDE-Classic/splash_top.png
+++ b/ksplashml/pics/themes/TDE-Classic/splash_top.png
Binary files differ
diff --git a/ksplashml/pics/themes/blue-bend/Preview.png b/ksplashml/pics/themes/blue-bend/Preview.png
index 3aee9284d..0145181bd 100644
--- a/ksplashml/pics/themes/blue-bend/Preview.png
+++ b/ksplashml/pics/themes/blue-bend/Preview.png
Binary files differ
diff --git a/ksplashml/pics/themes/blue-bend/splash_active_bar.png b/ksplashml/pics/themes/blue-bend/splash_active_bar.png
index 76ebcc43b..0d39d1b66 100644
--- a/ksplashml/pics/themes/blue-bend/splash_active_bar.png
+++ b/ksplashml/pics/themes/blue-bend/splash_active_bar.png
Binary files differ
diff --git a/ksplashml/pics/themes/blue-bend/splash_bottom.png b/ksplashml/pics/themes/blue-bend/splash_bottom.png
index 070097af1..4cb52aa53 100644
--- a/ksplashml/pics/themes/blue-bend/splash_bottom.png
+++ b/ksplashml/pics/themes/blue-bend/splash_bottom.png
Binary files differ
diff --git a/ksplashml/pics/themes/blue-bend/splash_inactive_bar.png b/ksplashml/pics/themes/blue-bend/splash_inactive_bar.png
index 7cfebc0f7..047ca9136 100644
--- a/ksplashml/pics/themes/blue-bend/splash_inactive_bar.png
+++ b/ksplashml/pics/themes/blue-bend/splash_inactive_bar.png
Binary files differ
diff --git a/ksplashml/pics/themes/blue-bend/splash_top.png b/ksplashml/pics/themes/blue-bend/splash_top.png
index bfcd8637b..1dcc548fd 100644
--- a/ksplashml/pics/themes/blue-bend/splash_top.png
+++ b/ksplashml/pics/themes/blue-bend/splash_top.png
Binary files differ
diff --git a/ksplashml/pics/themes/default/Preview.png b/ksplashml/pics/themes/default/Preview.png
index 25eae1721..e6a2efc34 100644
--- a/ksplashml/pics/themes/default/Preview.png
+++ b/ksplashml/pics/themes/default/Preview.png
Binary files differ
diff --git a/ksplashml/pics/themes/default/splash_active_bar.png b/ksplashml/pics/themes/default/splash_active_bar.png
index 10bef1e14..2586ec4f3 100644
--- a/ksplashml/pics/themes/default/splash_active_bar.png
+++ b/ksplashml/pics/themes/default/splash_active_bar.png
Binary files differ
diff --git a/ksplashml/pics/themes/default/splash_inactive_bar.png b/ksplashml/pics/themes/default/splash_inactive_bar.png
index e1690ee63..0d4b451cd 100644
--- a/ksplashml/pics/themes/default/splash_inactive_bar.png
+++ b/ksplashml/pics/themes/default/splash_inactive_bar.png
Binary files differ
diff --git a/ksplashml/pics/themes/default/splash_top.png b/ksplashml/pics/themes/default/splash_top.png
index d7c0c12e4..f9b305b2a 100644
--- a/ksplashml/pics/themes/default/splash_top.png
+++ b/ksplashml/pics/themes/default/splash_top.png
Binary files differ
diff --git a/ksplashml/pics/themes/simple/Preview.png b/ksplashml/pics/themes/simple/Preview.png
index 2e9b39236..453e64021 100644
--- a/ksplashml/pics/themes/simple/Preview.png
+++ b/ksplashml/pics/themes/simple/Preview.png
Binary files differ
diff --git a/ksplashml/themeengine/redmond/pics/Background.png b/ksplashml/themeengine/redmond/pics/Background.png
index a38a55d42..04750234f 100644
--- a/ksplashml/themeengine/redmond/pics/Background.png
+++ b/ksplashml/themeengine/redmond/pics/Background.png
Binary files differ
diff --git a/ksplashml/themeengine/redmond/pics/Preview.png b/ksplashml/themeengine/redmond/pics/Preview.png
index a52ec2644..121d2e73b 100644
--- a/ksplashml/themeengine/redmond/pics/Preview.png
+++ b/ksplashml/themeengine/redmond/pics/Preview.png
Binary files differ
diff --git a/ksplashml/themeengine/standard/Preview.png b/ksplashml/themeengine/standard/Preview.png
index 438d5490a..b2ce44163 100644
--- a/ksplashml/themeengine/standard/Preview.png
+++ b/ksplashml/themeengine/standard/Preview.png
Binary files differ
diff --git a/ksplashml/themeengine/standard/pics/Preview.png b/ksplashml/themeengine/standard/pics/Preview.png
index 3fd4ce9fe..4fb01119e 100644
--- a/ksplashml/themeengine/standard/pics/Preview.png
+++ b/ksplashml/themeengine/standard/pics/Preview.png
Binary files differ
diff --git a/ksysguard/cr128-app-ksysguard.png b/ksysguard/cr128-app-ksysguard.png
index f2223cde8..0c6dfccd3 100644
--- a/ksysguard/cr128-app-ksysguard.png
+++ b/ksysguard/cr128-app-ksysguard.png
Binary files differ
diff --git a/ksysguard/cr16-app-ksysguard.png b/ksysguard/cr16-app-ksysguard.png
index 1c2e678da..cecd11967 100644
--- a/ksysguard/cr16-app-ksysguard.png
+++ b/ksysguard/cr16-app-ksysguard.png
Binary files differ
diff --git a/ksysguard/cr32-app-ksysguard.png b/ksysguard/cr32-app-ksysguard.png
index 53005ff57..507fb7f74 100644
--- a/ksysguard/cr32-app-ksysguard.png
+++ b/ksysguard/cr32-app-ksysguard.png
Binary files differ
diff --git a/ksysguard/cr48-app-ksysguard.png b/ksysguard/cr48-app-ksysguard.png
index b636ff0e6..e6580ca8b 100644
--- a/ksysguard/cr48-app-ksysguard.png
+++ b/ksysguard/cr48-app-ksysguard.png
Binary files differ
diff --git a/ksysguard/cr64-app-ksysguard.png b/ksysguard/cr64-app-ksysguard.png
index 95ef34953..5f9f6bda1 100644
--- a/ksysguard/cr64-app-ksysguard.png
+++ b/ksysguard/cr64-app-ksysguard.png
Binary files differ
diff --git a/ksysguard/pics/X.png b/ksysguard/pics/X.png
index 5b0742f87..028fe59c3 100644
--- a/ksysguard/pics/X.png
+++ b/ksysguard/pics/X.png
Binary files differ
diff --git a/ksysguard/pics/computer.png b/ksysguard/pics/computer.png
index 85a078c13..4e2785ff1 100644
--- a/ksysguard/pics/computer.png
+++ b/ksysguard/pics/computer.png
Binary files differ
diff --git a/ksysguard/pics/daemon.png b/ksysguard/pics/daemon.png
index f21b3abfc..b879ae36a 100644
--- a/ksysguard/pics/daemon.png
+++ b/ksysguard/pics/daemon.png
Binary files differ
diff --git a/ksysguard/pics/kernel.png b/ksysguard/pics/kernel.png
index 9e8c0d8dc..93789d100 100644
--- a/ksysguard/pics/kernel.png
+++ b/ksysguard/pics/kernel.png
Binary files differ
diff --git a/ksysguard/pics/ksysguardd.png b/ksysguard/pics/ksysguardd.png
index ee4c6377d..ab4a33ce2 100644
--- a/ksysguard/pics/ksysguardd.png
+++ b/ksysguard/pics/ksysguardd.png
Binary files differ
diff --git a/ksysguard/pics/running.png b/ksysguard/pics/running.png
index 543710fb7..c42dd0489 100644
--- a/ksysguard/pics/running.png
+++ b/ksysguard/pics/running.png
Binary files differ
diff --git a/ksysguard/pics/shell.png b/ksysguard/pics/shell.png
index d7c7bc271..40b6b8632 100644
--- a/ksysguard/pics/shell.png
+++ b/ksysguard/pics/shell.png
Binary files differ
diff --git a/ksysguard/pics/tdeapp.png b/ksysguard/pics/tdeapp.png
index cc79b9511..9ab44b1bf 100644
--- a/ksysguard/pics/tdeapp.png
+++ b/ksysguard/pics/tdeapp.png
Binary files differ
diff --git a/ksysguard/pics/tools.png b/ksysguard/pics/tools.png
index 95bd319ce..b7c78e82f 100644
--- a/ksysguard/pics/tools.png
+++ b/ksysguard/pics/tools.png
Binary files differ
diff --git a/ksysguard/pics/unknownapp.png b/ksysguard/pics/unknownapp.png
index 2206448e4..7493e64ed 100644
--- a/ksysguard/pics/unknownapp.png
+++ b/ksysguard/pics/unknownapp.png
Binary files differ
diff --git a/ksysguard/pics/waiting.png b/ksysguard/pics/waiting.png
index 2415dfc78..650985328 100644
--- a/ksysguard/pics/waiting.png
+++ b/ksysguard/pics/waiting.png
Binary files differ
diff --git a/ktip/hi128-app-ktip.png b/ktip/hi128-app-ktip.png
index fa2626a57..9f6896f70 100644
--- a/ktip/hi128-app-ktip.png
+++ b/ktip/hi128-app-ktip.png
Binary files differ
diff --git a/ktip/hi16-app-ktip.png b/ktip/hi16-app-ktip.png
index 2b206f2a4..8c8f428d5 100644
--- a/ktip/hi16-app-ktip.png
+++ b/ktip/hi16-app-ktip.png
Binary files differ
diff --git a/ktip/hi22-app-ktip.png b/ktip/hi22-app-ktip.png
index 25d789431..6f2b4aaa2 100644
--- a/ktip/hi22-app-ktip.png
+++ b/ktip/hi22-app-ktip.png
Binary files differ
diff --git a/ktip/hi32-app-ktip.png b/ktip/hi32-app-ktip.png
index ee1b839ab..4a2822050 100644
--- a/ktip/hi32-app-ktip.png
+++ b/ktip/hi32-app-ktip.png
Binary files differ
diff --git a/ktip/hi48-app-ktip.png b/ktip/hi48-app-ktip.png
index de04d3aa7..ef9d44e27 100644
--- a/ktip/hi48-app-ktip.png
+++ b/ktip/hi48-app-ktip.png
Binary files differ
diff --git a/ktip/hi64-app-ktip.png b/ktip/hi64-app-ktip.png
index 3741faba6..0707f9a48 100644
--- a/ktip/hi64-app-ktip.png
+++ b/ktip/hi64-app-ktip.png
Binary files differ
diff --git a/ktip/pics/wizard_small.png b/ktip/pics/wizard_small.png
index 49e492058..a35b8eaeb 100644
--- a/ktip/pics/wizard_small.png
+++ b/ktip/pics/wizard_small.png
Binary files differ
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
index cdc03064a..6a9dec5a0 100644
--- a/kxkb/pics/hi16-app-kxkb.png
+++ b/kxkb/pics/hi16-app-kxkb.png
Binary files differ
diff --git a/kxkb/pics/hi32-app-kxkb.png b/kxkb/pics/hi32-app-kxkb.png
index c34e2ebc4..5a6ab6a8e 100644
--- a/kxkb/pics/hi32-app-kxkb.png
+++ b/kxkb/pics/hi32-app-kxkb.png
Binary files differ
diff --git a/kxkb/pics/hi48-app-kxkb.png b/kxkb/pics/hi48-app-kxkb.png
index d9d7b78be..3a030ce18 100644
--- a/kxkb/pics/hi48-app-kxkb.png
+++ b/kxkb/pics/hi48-app-kxkb.png
Binary files differ
diff --git a/l10n/C/flag.png b/l10n/C/flag.png
index 1eca43469..346906736 100644
--- a/l10n/C/flag.png
+++ b/l10n/C/flag.png
Binary files differ
diff --git a/l10n/ad/flag.png b/l10n/ad/flag.png
index f44fe9dc5..fbc8f5601 100644
--- a/l10n/ad/flag.png
+++ b/l10n/ad/flag.png
Binary files differ
diff --git a/l10n/ae/flag.png b/l10n/ae/flag.png
index 2e9f3cdaf..0920cd194 100644
--- a/l10n/ae/flag.png
+++ b/l10n/ae/flag.png
Binary files differ
diff --git a/l10n/af/flag.png b/l10n/af/flag.png
index 9ced727e4..15ecd0755 100644
--- a/l10n/af/flag.png
+++ b/l10n/af/flag.png
Binary files differ
diff --git a/l10n/ag/flag.png b/l10n/ag/flag.png
index 5c2b59017..14b749cff 100644
--- a/l10n/ag/flag.png
+++ b/l10n/ag/flag.png
Binary files differ
diff --git a/l10n/ai/flag.png b/l10n/ai/flag.png
index 17a4ddb41..ffabbe9dc 100644
--- a/l10n/ai/flag.png
+++ b/l10n/ai/flag.png
Binary files differ
diff --git a/l10n/al/flag.png b/l10n/al/flag.png
index 29b2bd87c..4a6bcbd6a 100644
--- a/l10n/al/flag.png
+++ b/l10n/al/flag.png
Binary files differ
diff --git a/l10n/am/flag.png b/l10n/am/flag.png
index d2a51a5f2..7b3a6d297 100644
--- a/l10n/am/flag.png
+++ b/l10n/am/flag.png
Binary files differ
diff --git a/l10n/an/flag.png b/l10n/an/flag.png
index 484c65308..cabad6c3b 100644
--- a/l10n/an/flag.png
+++ b/l10n/an/flag.png
Binary files differ
diff --git a/l10n/ao/flag.png b/l10n/ao/flag.png
index f1baae9d9..045c0a37a 100644
--- a/l10n/ao/flag.png
+++ b/l10n/ao/flag.png
Binary files differ
diff --git a/l10n/ar/flag.png b/l10n/ar/flag.png
index fc88ee431..f4f90ccce 100644
--- a/l10n/ar/flag.png
+++ b/l10n/ar/flag.png
Binary files differ
diff --git a/l10n/as/flag.png b/l10n/as/flag.png
index d08b0c7b9..3b8e62be3 100644
--- a/l10n/as/flag.png
+++ b/l10n/as/flag.png
Binary files differ
diff --git a/l10n/at/flag.png b/l10n/at/flag.png
index 265286ae6..533368340 100644
--- a/l10n/at/flag.png
+++ b/l10n/at/flag.png
Binary files differ
diff --git a/l10n/au/flag.png b/l10n/au/flag.png
index 617852fd0..f8e838bb9 100644
--- a/l10n/au/flag.png
+++ b/l10n/au/flag.png
Binary files differ
diff --git a/l10n/aw/flag.png b/l10n/aw/flag.png
index cf2a4f785..983731cfe 100644
--- a/l10n/aw/flag.png
+++ b/l10n/aw/flag.png
Binary files differ
diff --git a/l10n/az/flag.png b/l10n/az/flag.png
index dd5f5fc49..2e8b2454d 100644
--- a/l10n/az/flag.png
+++ b/l10n/az/flag.png
Binary files differ
diff --git a/l10n/ba/flag.png b/l10n/ba/flag.png
index 965f36786..a38629275 100644
--- a/l10n/ba/flag.png
+++ b/l10n/ba/flag.png
Binary files differ
diff --git a/l10n/bb/flag.png b/l10n/bb/flag.png
index b0f05ca1b..13038f153 100644
--- a/l10n/bb/flag.png
+++ b/l10n/bb/flag.png
Binary files differ
diff --git a/l10n/bd/flag.png b/l10n/bd/flag.png
index fa6537f18..0c6bb2ea3 100644
--- a/l10n/bd/flag.png
+++ b/l10n/bd/flag.png
Binary files differ
diff --git a/l10n/be/flag.png b/l10n/be/flag.png
index 577101621..0a86c4e8b 100644
--- a/l10n/be/flag.png
+++ b/l10n/be/flag.png
Binary files differ
diff --git a/l10n/bf/flag.png b/l10n/bf/flag.png
index f4863e595..6c96682dc 100644
--- a/l10n/bf/flag.png
+++ b/l10n/bf/flag.png
Binary files differ
diff --git a/l10n/bg/flag.png b/l10n/bg/flag.png
index 52abee73a..d9e01788e 100644
--- a/l10n/bg/flag.png
+++ b/l10n/bg/flag.png
Binary files differ
diff --git a/l10n/bh/flag.png b/l10n/bh/flag.png
index ae0d6174d..58fec0065 100644
--- a/l10n/bh/flag.png
+++ b/l10n/bh/flag.png
Binary files differ
diff --git a/l10n/bi/flag.png b/l10n/bi/flag.png
index a1723add8..b095d2fe4 100644
--- a/l10n/bi/flag.png
+++ b/l10n/bi/flag.png
Binary files differ
diff --git a/l10n/bj/flag.png b/l10n/bj/flag.png
index 7a12c3723..f5e23daf6 100644
--- a/l10n/bj/flag.png
+++ b/l10n/bj/flag.png
Binary files differ
diff --git a/l10n/bm/flag.png b/l10n/bm/flag.png
index 4ef5afc84..185fa9d0d 100644
--- a/l10n/bm/flag.png
+++ b/l10n/bm/flag.png
Binary files differ
diff --git a/l10n/bn/flag.png b/l10n/bn/flag.png
index 58de804c3..5d5d18f74 100644
--- a/l10n/bn/flag.png
+++ b/l10n/bn/flag.png
Binary files differ
diff --git a/l10n/bo/flag.png b/l10n/bo/flag.png
index 239bccd80..106517163 100644
--- a/l10n/bo/flag.png
+++ b/l10n/bo/flag.png
Binary files differ
diff --git a/l10n/br/flag.png b/l10n/br/flag.png
index 5f12ae2fa..130042070 100644
--- a/l10n/br/flag.png
+++ b/l10n/br/flag.png
Binary files differ
diff --git a/l10n/bs/flag.png b/l10n/bs/flag.png
index b232b475c..ef6139729 100644
--- a/l10n/bs/flag.png
+++ b/l10n/bs/flag.png
Binary files differ
diff --git a/l10n/bt/flag.png b/l10n/bt/flag.png
index a0ecc2f6f..4fba054ed 100644
--- a/l10n/bt/flag.png
+++ b/l10n/bt/flag.png
Binary files differ
diff --git a/l10n/bw/flag.png b/l10n/bw/flag.png
index 465d57427..10e10fa28 100644
--- a/l10n/bw/flag.png
+++ b/l10n/bw/flag.png
Binary files differ
diff --git a/l10n/by/flag.png b/l10n/by/flag.png
index a97922f75..45c254d2b 100644
--- a/l10n/by/flag.png
+++ b/l10n/by/flag.png
Binary files differ
diff --git a/l10n/bz/flag.png b/l10n/bz/flag.png
index 50fc8bb84..5c9dc9167 100644
--- a/l10n/bz/flag.png
+++ b/l10n/bz/flag.png
Binary files differ
diff --git a/l10n/ca/flag.png b/l10n/ca/flag.png
index 4e4305cc8..35993331f 100644
--- a/l10n/ca/flag.png
+++ b/l10n/ca/flag.png
Binary files differ
diff --git a/l10n/cc/flag.png b/l10n/cc/flag.png
index 742c38414..1fdb1c660 100644
--- a/l10n/cc/flag.png
+++ b/l10n/cc/flag.png
Binary files differ
diff --git a/l10n/cd/flag.png b/l10n/cd/flag.png
index 27fac92f1..79f6cbeb0 100644
--- a/l10n/cd/flag.png
+++ b/l10n/cd/flag.png
Binary files differ
diff --git a/l10n/cf/flag.png b/l10n/cf/flag.png
index 22ffa4566..531dfec8a 100644
--- a/l10n/cf/flag.png
+++ b/l10n/cf/flag.png
Binary files differ
diff --git a/l10n/cg/flag.png b/l10n/cg/flag.png
index 17dc6f559..120b427cd 100644
--- a/l10n/cg/flag.png
+++ b/l10n/cg/flag.png
Binary files differ
diff --git a/l10n/ch/flag.png b/l10n/ch/flag.png
index 423070fb8..2247b3991 100644
--- a/l10n/ch/flag.png
+++ b/l10n/ch/flag.png
Binary files differ
diff --git a/l10n/ci/flag.png b/l10n/ci/flag.png
index 8de82f30e..654ee7884 100644
--- a/l10n/ci/flag.png
+++ b/l10n/ci/flag.png
Binary files differ
diff --git a/l10n/ck/flag.png b/l10n/ck/flag.png
index b607549e8..5ce1c612f 100644
--- a/l10n/ck/flag.png
+++ b/l10n/ck/flag.png
Binary files differ
diff --git a/l10n/cl/flag.png b/l10n/cl/flag.png
index 82b7d140a..6c11f6bdc 100644
--- a/l10n/cl/flag.png
+++ b/l10n/cl/flag.png
Binary files differ
diff --git a/l10n/cm/flag.png b/l10n/cm/flag.png
index c1c77346a..41232b282 100644
--- a/l10n/cm/flag.png
+++ b/l10n/cm/flag.png
Binary files differ
diff --git a/l10n/cn/flag.png b/l10n/cn/flag.png
index 9bfcc812c..dfc481b7e 100644
--- a/l10n/cn/flag.png
+++ b/l10n/cn/flag.png
Binary files differ
diff --git a/l10n/co/flag.png b/l10n/co/flag.png
index ba3227c73..e63cdfb27 100644
--- a/l10n/co/flag.png
+++ b/l10n/co/flag.png
Binary files differ
diff --git a/l10n/cr/flag.png b/l10n/cr/flag.png
index 0734f26f7..652c9175e 100644
--- a/l10n/cr/flag.png
+++ b/l10n/cr/flag.png
Binary files differ
diff --git a/l10n/cu/flag.png b/l10n/cu/flag.png
index cc8ab0b28..a937d1848 100644
--- a/l10n/cu/flag.png
+++ b/l10n/cu/flag.png
Binary files differ
diff --git a/l10n/cv/flag.png b/l10n/cv/flag.png
index 91633702a..2bda40a93 100644
--- a/l10n/cv/flag.png
+++ b/l10n/cv/flag.png
Binary files differ
diff --git a/l10n/cx/flag.png b/l10n/cx/flag.png
index 120a3c457..346f98b58 100644
--- a/l10n/cx/flag.png
+++ b/l10n/cx/flag.png
Binary files differ
diff --git a/l10n/cy/flag.png b/l10n/cy/flag.png
index da0514f20..e0d49fd73 100644
--- a/l10n/cy/flag.png
+++ b/l10n/cy/flag.png
Binary files differ
diff --git a/l10n/cz/flag.png b/l10n/cz/flag.png
index 3b4cc0ea7..c0cd5feb0 100644
--- a/l10n/cz/flag.png
+++ b/l10n/cz/flag.png
Binary files differ
diff --git a/l10n/de/flag.png b/l10n/de/flag.png
index 8af614fa9..5cf8fd97e 100644
--- a/l10n/de/flag.png
+++ b/l10n/de/flag.png
Binary files differ
diff --git a/l10n/dj/flag.png b/l10n/dj/flag.png
index 1445d1947..8cbda05eb 100644
--- a/l10n/dj/flag.png
+++ b/l10n/dj/flag.png
Binary files differ
diff --git a/l10n/dk/flag.png b/l10n/dk/flag.png
index e67d42af6..a0b8a8356 100644
--- a/l10n/dk/flag.png
+++ b/l10n/dk/flag.png
Binary files differ
diff --git a/l10n/dm/flag.png b/l10n/dm/flag.png
index fbb3c6844..78aa2f347 100644
--- a/l10n/dm/flag.png
+++ b/l10n/dm/flag.png
Binary files differ
diff --git a/l10n/do/flag.png b/l10n/do/flag.png
index a506408b9..6feefe465 100644
--- a/l10n/do/flag.png
+++ b/l10n/do/flag.png
Binary files differ
diff --git a/l10n/dz/flag.png b/l10n/dz/flag.png
index a072f95f5..c53a097cd 100644
--- a/l10n/dz/flag.png
+++ b/l10n/dz/flag.png
Binary files differ
diff --git a/l10n/ec/flag.png b/l10n/ec/flag.png
index 33fd40e3e..b2d720b87 100644
--- a/l10n/ec/flag.png
+++ b/l10n/ec/flag.png
Binary files differ
diff --git a/l10n/ee/flag.png b/l10n/ee/flag.png
index d34e3111a..dd5c4a0bb 100644
--- a/l10n/ee/flag.png
+++ b/l10n/ee/flag.png
Binary files differ
diff --git a/l10n/eg/flag.png b/l10n/eg/flag.png
index bdb564fd8..d73bd2f6e 100644
--- a/l10n/eg/flag.png
+++ b/l10n/eg/flag.png
Binary files differ
diff --git a/l10n/eh/flag.png b/l10n/eh/flag.png
index 6d2982a00..9c6711314 100644
--- a/l10n/eh/flag.png
+++ b/l10n/eh/flag.png
Binary files differ
diff --git a/l10n/er/flag.png b/l10n/er/flag.png
index 0a72d5227..4ab0bc0da 100644
--- a/l10n/er/flag.png
+++ b/l10n/er/flag.png
Binary files differ
diff --git a/l10n/es/flag.png b/l10n/es/flag.png
index a86a68984..269c1fba0 100644
--- a/l10n/es/flag.png
+++ b/l10n/es/flag.png
Binary files differ
diff --git a/l10n/et/flag.png b/l10n/et/flag.png
index 1e1f224f9..e2ec68bcc 100644
--- a/l10n/et/flag.png
+++ b/l10n/et/flag.png
Binary files differ
diff --git a/l10n/fi/flag.png b/l10n/fi/flag.png
index 3d88b2d2f..10ff1d3e5 100644
--- a/l10n/fi/flag.png
+++ b/l10n/fi/flag.png
Binary files differ
diff --git a/l10n/fj/flag.png b/l10n/fj/flag.png
index 637817d90..ab6ab1814 100644
--- a/l10n/fj/flag.png
+++ b/l10n/fj/flag.png
Binary files differ
diff --git a/l10n/fk/flag.png b/l10n/fk/flag.png
index 18d7b2059..7a8121065 100644
--- a/l10n/fk/flag.png
+++ b/l10n/fk/flag.png
Binary files differ
diff --git a/l10n/fm/flag.png b/l10n/fm/flag.png
index edc05cfda..c25664f0c 100644
--- a/l10n/fm/flag.png
+++ b/l10n/fm/flag.png
Binary files differ
diff --git a/l10n/fo/flag.png b/l10n/fo/flag.png
index 81d0858c7..e6d14f3dc 100644
--- a/l10n/fo/flag.png
+++ b/l10n/fo/flag.png
Binary files differ
diff --git a/l10n/fr/flag.png b/l10n/fr/flag.png
index dfa5e70ad..1f838c4e4 100644
--- a/l10n/fr/flag.png
+++ b/l10n/fr/flag.png
Binary files differ
diff --git a/l10n/ga/flag.png b/l10n/ga/flag.png
index 6c766466c..87f924b68 100644
--- a/l10n/ga/flag.png
+++ b/l10n/ga/flag.png
Binary files differ
diff --git a/l10n/gb/flag.png b/l10n/gb/flag.png
index 09e340d06..0cab30b34 100644
--- a/l10n/gb/flag.png
+++ b/l10n/gb/flag.png
Binary files differ
diff --git a/l10n/gd/flag.png b/l10n/gd/flag.png
index de907ef51..212c3d280 100644
--- a/l10n/gd/flag.png
+++ b/l10n/gd/flag.png
Binary files differ
diff --git a/l10n/ge/flag.png b/l10n/ge/flag.png
index 23a7b4daf..6913d6fce 100644
--- a/l10n/ge/flag.png
+++ b/l10n/ge/flag.png
Binary files differ
diff --git a/l10n/gh/flag.png b/l10n/gh/flag.png
index 72ecd1108..4fd0f4755 100644
--- a/l10n/gh/flag.png
+++ b/l10n/gh/flag.png
Binary files differ
diff --git a/l10n/gi/flag.png b/l10n/gi/flag.png
index e307cd886..445f23df3 100644
--- a/l10n/gi/flag.png
+++ b/l10n/gi/flag.png
Binary files differ
diff --git a/l10n/gl/flag.png b/l10n/gl/flag.png
index fe3ad00ea..8a1ae6a48 100644
--- a/l10n/gl/flag.png
+++ b/l10n/gl/flag.png
Binary files differ
diff --git a/l10n/gm/flag.png b/l10n/gm/flag.png
index f3e6987d8..589348a56 100644
--- a/l10n/gm/flag.png
+++ b/l10n/gm/flag.png
Binary files differ
diff --git a/l10n/gn/flag.png b/l10n/gn/flag.png
index 1e5d301d6..ce0d31d0f 100644
--- a/l10n/gn/flag.png
+++ b/l10n/gn/flag.png
Binary files differ
diff --git a/l10n/gp/flag.png b/l10n/gp/flag.png
index e8c265c6b..0d231f385 100644
--- a/l10n/gp/flag.png
+++ b/l10n/gp/flag.png
Binary files differ
diff --git a/l10n/gq/flag.png b/l10n/gq/flag.png
index 9e9140d07..e68d28b94 100644
--- a/l10n/gq/flag.png
+++ b/l10n/gq/flag.png
Binary files differ
diff --git a/l10n/gr/flag.png b/l10n/gr/flag.png
index ea851be85..79bf55176 100644
--- a/l10n/gr/flag.png
+++ b/l10n/gr/flag.png
Binary files differ
diff --git a/l10n/gt/flag.png b/l10n/gt/flag.png
index 05550ae9f..19ae3ffc6 100644
--- a/l10n/gt/flag.png
+++ b/l10n/gt/flag.png
Binary files differ
diff --git a/l10n/gu/flag.png b/l10n/gu/flag.png
index 995b7f9e9..42676a1d8 100644
--- a/l10n/gu/flag.png
+++ b/l10n/gu/flag.png
Binary files differ
diff --git a/l10n/gw/flag.png b/l10n/gw/flag.png
index 904ce6a98..f791da48d 100644
--- a/l10n/gw/flag.png
+++ b/l10n/gw/flag.png
Binary files differ
diff --git a/l10n/gy/flag.png b/l10n/gy/flag.png
index f90d44f26..f6069a32b 100644
--- a/l10n/gy/flag.png
+++ b/l10n/gy/flag.png
Binary files differ
diff --git a/l10n/hk/flag.png b/l10n/hk/flag.png
index c4d10355d..86d098ed0 100644
--- a/l10n/hk/flag.png
+++ b/l10n/hk/flag.png
Binary files differ
diff --git a/l10n/hn/flag.png b/l10n/hn/flag.png
index 3bcdaf9f5..8f5f63526 100644
--- a/l10n/hn/flag.png
+++ b/l10n/hn/flag.png
Binary files differ
diff --git a/l10n/hr/flag.png b/l10n/hr/flag.png
index d179cff2a..6af0f205e 100644
--- a/l10n/hr/flag.png
+++ b/l10n/hr/flag.png
Binary files differ
diff --git a/l10n/ht/flag.png b/l10n/ht/flag.png
index 2ba756cab..9e24c4d4f 100644
--- a/l10n/ht/flag.png
+++ b/l10n/ht/flag.png
Binary files differ
diff --git a/l10n/hu/flag.png b/l10n/hu/flag.png
index ab4636411..8ffc67d10 100644
--- a/l10n/hu/flag.png
+++ b/l10n/hu/flag.png
Binary files differ
diff --git a/l10n/id/flag.png b/l10n/id/flag.png
index e42cdc091..fd94581e8 100644
--- a/l10n/id/flag.png
+++ b/l10n/id/flag.png
Binary files differ
diff --git a/l10n/ie/flag.png b/l10n/ie/flag.png
index 787d70aca..8749cfb3c 100644
--- a/l10n/ie/flag.png
+++ b/l10n/ie/flag.png
Binary files differ
diff --git a/l10n/il/flag.png b/l10n/il/flag.png
index c6ea914df..05f794826 100644
--- a/l10n/il/flag.png
+++ b/l10n/il/flag.png
Binary files differ
diff --git a/l10n/in/flag.png b/l10n/in/flag.png
index 53b3aaa48..bcf417f9b 100644
--- a/l10n/in/flag.png
+++ b/l10n/in/flag.png
Binary files differ
diff --git a/l10n/iq/flag.png b/l10n/iq/flag.png
index ba66015e9..c200370a0 100644
--- a/l10n/iq/flag.png
+++ b/l10n/iq/flag.png
Binary files differ
diff --git a/l10n/ir/flag.png b/l10n/ir/flag.png
index d8d3a5efc..355dd7e2d 100644
--- a/l10n/ir/flag.png
+++ b/l10n/ir/flag.png
Binary files differ
diff --git a/l10n/is/flag.png b/l10n/is/flag.png
index e59bf7ecd..734cf083f 100644
--- a/l10n/is/flag.png
+++ b/l10n/is/flag.png
Binary files differ
diff --git a/l10n/it/flag.png b/l10n/it/flag.png
index 264a171a8..b5cc3caec 100644
--- a/l10n/it/flag.png
+++ b/l10n/it/flag.png
Binary files differ
diff --git a/l10n/jm/flag.png b/l10n/jm/flag.png
index e2475a5a6..ed459f05d 100644
--- a/l10n/jm/flag.png
+++ b/l10n/jm/flag.png
Binary files differ
diff --git a/l10n/jo/flag.png b/l10n/jo/flag.png
index a886fc40a..16de925d2 100644
--- a/l10n/jo/flag.png
+++ b/l10n/jo/flag.png
Binary files differ
diff --git a/l10n/jp/flag.png b/l10n/jp/flag.png
index b441f4472..c61eee796 100644
--- a/l10n/jp/flag.png
+++ b/l10n/jp/flag.png
Binary files differ
diff --git a/l10n/ke/flag.png b/l10n/ke/flag.png
index 39031cf69..4b409357a 100644
--- a/l10n/ke/flag.png
+++ b/l10n/ke/flag.png
Binary files differ
diff --git a/l10n/kg/flag.png b/l10n/kg/flag.png
index 78ea9145d..1176b0fbb 100644
--- a/l10n/kg/flag.png
+++ b/l10n/kg/flag.png
Binary files differ
diff --git a/l10n/kh/flag.png b/l10n/kh/flag.png
index 6e95dded9..e61395cab 100644
--- a/l10n/kh/flag.png
+++ b/l10n/kh/flag.png
Binary files differ
diff --git a/l10n/ki/flag.png b/l10n/ki/flag.png
index 993e6c185..4910e5dc2 100644
--- a/l10n/ki/flag.png
+++ b/l10n/ki/flag.png
Binary files differ
diff --git a/l10n/km/flag.png b/l10n/km/flag.png
index dbfea26cc..238a0846c 100644
--- a/l10n/km/flag.png
+++ b/l10n/km/flag.png
Binary files differ
diff --git a/l10n/kn/flag.png b/l10n/kn/flag.png
index 31031bed4..c39430653 100644
--- a/l10n/kn/flag.png
+++ b/l10n/kn/flag.png
Binary files differ
diff --git a/l10n/kp/flag.png b/l10n/kp/flag.png
index 04ff85248..6ca889e06 100644
--- a/l10n/kp/flag.png
+++ b/l10n/kp/flag.png
Binary files differ
diff --git a/l10n/kr/flag.png b/l10n/kr/flag.png
index bbac7b646..e332a5aec 100644
--- a/l10n/kr/flag.png
+++ b/l10n/kr/flag.png
Binary files differ
diff --git a/l10n/kw/flag.png b/l10n/kw/flag.png
index 7c029c42d..8b1206d72 100644
--- a/l10n/kw/flag.png
+++ b/l10n/kw/flag.png
Binary files differ
diff --git a/l10n/ky/flag.png b/l10n/ky/flag.png
index 019fd4116..32b6459e2 100644
--- a/l10n/ky/flag.png
+++ b/l10n/ky/flag.png
Binary files differ
diff --git a/l10n/kz/flag.png b/l10n/kz/flag.png
index 410e12ba9..5b41e1808 100644
--- a/l10n/kz/flag.png
+++ b/l10n/kz/flag.png
Binary files differ
diff --git a/l10n/la/flag.png b/l10n/la/flag.png
index 922dbf588..94aa07256 100644
--- a/l10n/la/flag.png
+++ b/l10n/la/flag.png
Binary files differ
diff --git a/l10n/lb/flag.png b/l10n/lb/flag.png
index e20a2602d..65b1f71b1 100644
--- a/l10n/lb/flag.png
+++ b/l10n/lb/flag.png
Binary files differ
diff --git a/l10n/lc/flag.png b/l10n/lc/flag.png
index 7e65b3b70..57c1da155 100644
--- a/l10n/lc/flag.png
+++ b/l10n/lc/flag.png
Binary files differ
diff --git a/l10n/li/flag.png b/l10n/li/flag.png
index 0b0e03144..0d2050385 100644
--- a/l10n/li/flag.png
+++ b/l10n/li/flag.png
Binary files differ
diff --git a/l10n/lk/flag.png b/l10n/lk/flag.png
index 7be5e1cec..0e820d7d4 100644
--- a/l10n/lk/flag.png
+++ b/l10n/lk/flag.png
Binary files differ
diff --git a/l10n/lr/flag.png b/l10n/lr/flag.png
index d7607ef42..83b3e8d87 100644
--- a/l10n/lr/flag.png
+++ b/l10n/lr/flag.png
Binary files differ
diff --git a/l10n/ls/flag.png b/l10n/ls/flag.png
index 52fc8b754..fd1bd3b47 100644
--- a/l10n/ls/flag.png
+++ b/l10n/ls/flag.png
Binary files differ
diff --git a/l10n/lt/flag.png b/l10n/lt/flag.png
index 4e78cbcd3..5356e0734 100644
--- a/l10n/lt/flag.png
+++ b/l10n/lt/flag.png
Binary files differ
diff --git a/l10n/lu/flag.png b/l10n/lu/flag.png
index 4a6329d15..9fa189894 100644
--- a/l10n/lu/flag.png
+++ b/l10n/lu/flag.png
Binary files differ
diff --git a/l10n/lv/flag.png b/l10n/lv/flag.png
index 70c67c636..f2b790d50 100644
--- a/l10n/lv/flag.png
+++ b/l10n/lv/flag.png
Binary files differ
diff --git a/l10n/ly/flag.png b/l10n/ly/flag.png
index 97d6872a5..4dd5f9e7b 100644
--- a/l10n/ly/flag.png
+++ b/l10n/ly/flag.png
Binary files differ
diff --git a/l10n/ma/flag.png b/l10n/ma/flag.png
index 50835195d..e04147568 100644
--- a/l10n/ma/flag.png
+++ b/l10n/ma/flag.png
Binary files differ
diff --git a/l10n/mc/flag.png b/l10n/mc/flag.png
index 79f7faf1d..fed650ed0 100644
--- a/l10n/mc/flag.png
+++ b/l10n/mc/flag.png
Binary files differ
diff --git a/l10n/md/flag.png b/l10n/md/flag.png
index 648497412..0a680e35e 100644
--- a/l10n/md/flag.png
+++ b/l10n/md/flag.png
Binary files differ
diff --git a/l10n/me/flag.png b/l10n/me/flag.png
index c551f5a00..696a2ce26 100644
--- a/l10n/me/flag.png
+++ b/l10n/me/flag.png
Binary files differ
diff --git a/l10n/mg/flag.png b/l10n/mg/flag.png
index 3ba60a937..6bfa95e26 100644
--- a/l10n/mg/flag.png
+++ b/l10n/mg/flag.png
Binary files differ
diff --git a/l10n/mh/flag.png b/l10n/mh/flag.png
index 2af43ef7c..59d61c4e8 100644
--- a/l10n/mh/flag.png
+++ b/l10n/mh/flag.png
Binary files differ
diff --git a/l10n/mk/flag.png b/l10n/mk/flag.png
index b1fc6a264..851bf9152 100644
--- a/l10n/mk/flag.png
+++ b/l10n/mk/flag.png
Binary files differ
diff --git a/l10n/ml/flag.png b/l10n/ml/flag.png
index 18e06614b..641e46aec 100644
--- a/l10n/ml/flag.png
+++ b/l10n/ml/flag.png
Binary files differ
diff --git a/l10n/mm/flag.png b/l10n/mm/flag.png
index ff2ee11b2..f8d5a26a5 100644
--- a/l10n/mm/flag.png
+++ b/l10n/mm/flag.png
Binary files differ
diff --git a/l10n/mn/flag.png b/l10n/mn/flag.png
index 8f4a15c45..dad86bf4a 100644
--- a/l10n/mn/flag.png
+++ b/l10n/mn/flag.png
Binary files differ
diff --git a/l10n/mo/flag.png b/l10n/mo/flag.png
index 7ef751b55..a2854ae66 100644
--- a/l10n/mo/flag.png
+++ b/l10n/mo/flag.png
Binary files differ
diff --git a/l10n/mq/flag.png b/l10n/mq/flag.png
index 86b49650b..a39c92919 100644
--- a/l10n/mq/flag.png
+++ b/l10n/mq/flag.png
Binary files differ
diff --git a/l10n/mr/flag.png b/l10n/mr/flag.png
index 4e4c1d573..a7684b897 100644
--- a/l10n/mr/flag.png
+++ b/l10n/mr/flag.png
Binary files differ
diff --git a/l10n/ms/flag.png b/l10n/ms/flag.png
index 3b9460ef0..94e169540 100644
--- a/l10n/ms/flag.png
+++ b/l10n/ms/flag.png
Binary files differ
diff --git a/l10n/mt/flag.png b/l10n/mt/flag.png
index f5f0a8fcb..599251ccc 100644
--- a/l10n/mt/flag.png
+++ b/l10n/mt/flag.png
Binary files differ
diff --git a/l10n/mu/flag.png b/l10n/mu/flag.png
index 51e70ecae..4247b3372 100644
--- a/l10n/mu/flag.png
+++ b/l10n/mu/flag.png
Binary files differ
diff --git a/l10n/mv/flag.png b/l10n/mv/flag.png
index e125d1daf..c5204326f 100644
--- a/l10n/mv/flag.png
+++ b/l10n/mv/flag.png
Binary files differ
diff --git a/l10n/mw/flag.png b/l10n/mw/flag.png
index 1e570be4c..33e33cff1 100644
--- a/l10n/mw/flag.png
+++ b/l10n/mw/flag.png
Binary files differ
diff --git a/l10n/mx/flag.png b/l10n/mx/flag.png
index 0f4d9e6ab..f0536a225 100644
--- a/l10n/mx/flag.png
+++ b/l10n/mx/flag.png
Binary files differ
diff --git a/l10n/my/flag.png b/l10n/my/flag.png
index 393545245..f9f4295bc 100644
--- a/l10n/my/flag.png
+++ b/l10n/my/flag.png
Binary files differ
diff --git a/l10n/mz/flag.png b/l10n/mz/flag.png
index 3f32f1a00..3ea413525 100644
--- a/l10n/mz/flag.png
+++ b/l10n/mz/flag.png
Binary files differ
diff --git a/l10n/na/flag.png b/l10n/na/flag.png
index d98efcc61..1677ff71c 100644
--- a/l10n/na/flag.png
+++ b/l10n/na/flag.png
Binary files differ
diff --git a/l10n/nc/flag.png b/l10n/nc/flag.png
index b06d21b25..076df5b3e 100644
--- a/l10n/nc/flag.png
+++ b/l10n/nc/flag.png
Binary files differ
diff --git a/l10n/ne/flag.png b/l10n/ne/flag.png
index 0d5c1dabd..5881bff06 100644
--- a/l10n/ne/flag.png
+++ b/l10n/ne/flag.png
Binary files differ
diff --git a/l10n/nf/flag.png b/l10n/nf/flag.png
index 37459d9cd..9869a5461 100644
--- a/l10n/nf/flag.png
+++ b/l10n/nf/flag.png
Binary files differ
diff --git a/l10n/ng/flag.png b/l10n/ng/flag.png
index d0fbb2187..1e39ce931 100644
--- a/l10n/ng/flag.png
+++ b/l10n/ng/flag.png
Binary files differ
diff --git a/l10n/ni/flag.png b/l10n/ni/flag.png
index b60009d30..41db721e1 100644
--- a/l10n/ni/flag.png
+++ b/l10n/ni/flag.png
Binary files differ
diff --git a/l10n/nl/flag.png b/l10n/nl/flag.png
index d35a12a9d..9462408e7 100644
--- a/l10n/nl/flag.png
+++ b/l10n/nl/flag.png
Binary files differ
diff --git a/l10n/no/flag.png b/l10n/no/flag.png
index d4de76425..ba73fd393 100644
--- a/l10n/no/flag.png
+++ b/l10n/no/flag.png
Binary files differ
diff --git a/l10n/np/flag.png b/l10n/np/flag.png
index 1d479d92e..ab1b265d7 100644
--- a/l10n/np/flag.png
+++ b/l10n/np/flag.png
Binary files differ
diff --git a/l10n/nr/flag.png b/l10n/nr/flag.png
index a3efcac4a..8555cf5a0 100644
--- a/l10n/nr/flag.png
+++ b/l10n/nr/flag.png
Binary files differ
diff --git a/l10n/nu/flag.png b/l10n/nu/flag.png
index 82fbacd56..da077a241 100644
--- a/l10n/nu/flag.png
+++ b/l10n/nu/flag.png
Binary files differ
diff --git a/l10n/nz/flag.png b/l10n/nz/flag.png
index bb4d75d97..60b15f65b 100644
--- a/l10n/nz/flag.png
+++ b/l10n/nz/flag.png
Binary files differ
diff --git a/l10n/om/flag.png b/l10n/om/flag.png
index 78e5d779a..56832dfc8 100644
--- a/l10n/om/flag.png
+++ b/l10n/om/flag.png
Binary files differ
diff --git a/l10n/pa/flag.png b/l10n/pa/flag.png
index 396154084..72ef8208b 100644
--- a/l10n/pa/flag.png
+++ b/l10n/pa/flag.png
Binary files differ
diff --git a/l10n/pe/flag.png b/l10n/pe/flag.png
index 65ba16788..950612aaf 100644
--- a/l10n/pe/flag.png
+++ b/l10n/pe/flag.png
Binary files differ
diff --git a/l10n/pf/flag.png b/l10n/pf/flag.png
index a140e68e5..bde4a3cdb 100644
--- a/l10n/pf/flag.png
+++ b/l10n/pf/flag.png
Binary files differ
diff --git a/l10n/pg/flag.png b/l10n/pg/flag.png
index 092f2657a..22537ffde 100644
--- a/l10n/pg/flag.png
+++ b/l10n/pg/flag.png
Binary files differ
diff --git a/l10n/ph/flag.png b/l10n/ph/flag.png
index 875ec51bf..9227f126f 100644
--- a/l10n/ph/flag.png
+++ b/l10n/ph/flag.png
Binary files differ
diff --git a/l10n/pk/flag.png b/l10n/pk/flag.png
index c41622195..94d2daf49 100644
--- a/l10n/pk/flag.png
+++ b/l10n/pk/flag.png
Binary files differ
diff --git a/l10n/pl/flag.png b/l10n/pl/flag.png
index 735ebb30b..ec01938c6 100644
--- a/l10n/pl/flag.png
+++ b/l10n/pl/flag.png
Binary files differ
diff --git a/l10n/pm/flag.png b/l10n/pm/flag.png
index 14a435a2c..4a8ac807e 100644
--- a/l10n/pm/flag.png
+++ b/l10n/pm/flag.png
Binary files differ
diff --git a/l10n/pn/flag.png b/l10n/pn/flag.png
index b2c55872c..2ca450eb6 100644
--- a/l10n/pn/flag.png
+++ b/l10n/pn/flag.png
Binary files differ
diff --git a/l10n/pr/flag.png b/l10n/pr/flag.png
index ac9b343d2..7659f36ea 100644
--- a/l10n/pr/flag.png
+++ b/l10n/pr/flag.png
Binary files differ
diff --git a/l10n/ps/flag.png b/l10n/ps/flag.png
index fab9b33f8..ab61a9cb1 100644
--- a/l10n/ps/flag.png
+++ b/l10n/ps/flag.png
Binary files differ
diff --git a/l10n/pt/flag.png b/l10n/pt/flag.png
index f1e0e33ae..490668054 100644
--- a/l10n/pt/flag.png
+++ b/l10n/pt/flag.png
Binary files differ
diff --git a/l10n/pw/flag.png b/l10n/pw/flag.png
index e40369e7c..45c2e04d5 100644
--- a/l10n/pw/flag.png
+++ b/l10n/pw/flag.png
Binary files differ
diff --git a/l10n/py/flag.png b/l10n/py/flag.png
index 89d68d2ba..53e84bf99 100644
--- a/l10n/py/flag.png
+++ b/l10n/py/flag.png
Binary files differ
diff --git a/l10n/qa/flag.png b/l10n/qa/flag.png
index f46a5bea6..7a06ffbb0 100644
--- a/l10n/qa/flag.png
+++ b/l10n/qa/flag.png
Binary files differ
diff --git a/l10n/ro/flag.png b/l10n/ro/flag.png
index 0a38ec931..7da5cc434 100644
--- a/l10n/ro/flag.png
+++ b/l10n/ro/flag.png
Binary files differ
diff --git a/l10n/rs/flag.png b/l10n/rs/flag.png
index 0759a4c14..6c8e16da1 100644
--- a/l10n/rs/flag.png
+++ b/l10n/rs/flag.png
Binary files differ
diff --git a/l10n/ru/flag.png b/l10n/ru/flag.png
index 506f4d26e..a750b8f29 100644
--- a/l10n/ru/flag.png
+++ b/l10n/ru/flag.png
Binary files differ
diff --git a/l10n/rw/flag.png b/l10n/rw/flag.png
index 0f73d68ba..506e95bb4 100644
--- a/l10n/rw/flag.png
+++ b/l10n/rw/flag.png
Binary files differ
diff --git a/l10n/sa/flag.png b/l10n/sa/flag.png
index 0d232cec9..2ae8fe12e 100644
--- a/l10n/sa/flag.png
+++ b/l10n/sa/flag.png
Binary files differ
diff --git a/l10n/sb/flag.png b/l10n/sb/flag.png
index 3971bcbfc..fea3e34f9 100644
--- a/l10n/sb/flag.png
+++ b/l10n/sb/flag.png
Binary files differ
diff --git a/l10n/sc/flag.png b/l10n/sc/flag.png
index b0ad2726d..6931efed6 100644
--- a/l10n/sc/flag.png
+++ b/l10n/sc/flag.png
Binary files differ
diff --git a/l10n/sd/flag.png b/l10n/sd/flag.png
index 6b8c1ee46..41c8f455b 100644
--- a/l10n/sd/flag.png
+++ b/l10n/sd/flag.png
Binary files differ
diff --git a/l10n/se/flag.png b/l10n/se/flag.png
index 19d987fec..2921fb060 100644
--- a/l10n/se/flag.png
+++ b/l10n/se/flag.png
Binary files differ
diff --git a/l10n/sg/flag.png b/l10n/sg/flag.png
index 4ff08f5b8..32d3c9f24 100644
--- a/l10n/sg/flag.png
+++ b/l10n/sg/flag.png
Binary files differ
diff --git a/l10n/sh/flag.png b/l10n/sh/flag.png
index 1cdea8e4d..9398c55bd 100644
--- a/l10n/sh/flag.png
+++ b/l10n/sh/flag.png
Binary files differ
diff --git a/l10n/si/flag.png b/l10n/si/flag.png
index ea79453d3..aa5dab013 100644
--- a/l10n/si/flag.png
+++ b/l10n/si/flag.png
Binary files differ
diff --git a/l10n/sk/flag.png b/l10n/sk/flag.png
index b1024ddb1..123d7ab81 100644
--- a/l10n/sk/flag.png
+++ b/l10n/sk/flag.png
Binary files differ
diff --git a/l10n/sm/flag.png b/l10n/sm/flag.png
index 3b7f9b32b..5e4008876 100644
--- a/l10n/sm/flag.png
+++ b/l10n/sm/flag.png
Binary files differ
diff --git a/l10n/sn/flag.png b/l10n/sn/flag.png
index 6bd943d3c..de21a1906 100644
--- a/l10n/sn/flag.png
+++ b/l10n/sn/flag.png
Binary files differ
diff --git a/l10n/so/flag.png b/l10n/so/flag.png
index d18135495..d9ccea6df 100644
--- a/l10n/so/flag.png
+++ b/l10n/so/flag.png
Binary files differ
diff --git a/l10n/sr/flag.png b/l10n/sr/flag.png
index 378585f07..2a4b68ab4 100644
--- a/l10n/sr/flag.png
+++ b/l10n/sr/flag.png
Binary files differ
diff --git a/l10n/st/flag.png b/l10n/st/flag.png
index 32ea174ba..b96bf87fa 100644
--- a/l10n/st/flag.png
+++ b/l10n/st/flag.png
Binary files differ
diff --git a/l10n/sv/flag.png b/l10n/sv/flag.png
index 822522d92..9afd8ce8d 100644
--- a/l10n/sv/flag.png
+++ b/l10n/sv/flag.png
Binary files differ
diff --git a/l10n/sy/flag.png b/l10n/sy/flag.png
index b3ef1222b..713674c92 100644
--- a/l10n/sy/flag.png
+++ b/l10n/sy/flag.png
Binary files differ
diff --git a/l10n/sz/flag.png b/l10n/sz/flag.png
index 40d22dd33..9a0e0668e 100644
--- a/l10n/sz/flag.png
+++ b/l10n/sz/flag.png
Binary files differ
diff --git a/l10n/tc/flag.png b/l10n/tc/flag.png
index c52443b7f..485264e06 100644
--- a/l10n/tc/flag.png
+++ b/l10n/tc/flag.png
Binary files differ
diff --git a/l10n/td/flag.png b/l10n/td/flag.png
index 44a668d61..2a199cba1 100644
--- a/l10n/td/flag.png
+++ b/l10n/td/flag.png
Binary files differ
diff --git a/l10n/tg/flag.png b/l10n/tg/flag.png
index b27b58c00..2cd9e196f 100644
--- a/l10n/tg/flag.png
+++ b/l10n/tg/flag.png
Binary files differ
diff --git a/l10n/th/flag.png b/l10n/th/flag.png
index 22b2e4903..c2b643ba0 100644
--- a/l10n/th/flag.png
+++ b/l10n/th/flag.png
Binary files differ
diff --git a/l10n/tj/flag.png b/l10n/tj/flag.png
index 12fa62963..e91859bd4 100644
--- a/l10n/tj/flag.png
+++ b/l10n/tj/flag.png
Binary files differ
diff --git a/l10n/tk/flag.png b/l10n/tk/flag.png
index eaad68f6b..d3f023d61 100644
--- a/l10n/tk/flag.png
+++ b/l10n/tk/flag.png
Binary files differ
diff --git a/l10n/tm/flag.png b/l10n/tm/flag.png
index b416541be..e150eec76 100644
--- a/l10n/tm/flag.png
+++ b/l10n/tm/flag.png
Binary files differ
diff --git a/l10n/tn/flag.png b/l10n/tn/flag.png
index 76186a245..af2199938 100644
--- a/l10n/tn/flag.png
+++ b/l10n/tn/flag.png
Binary files differ
diff --git a/l10n/to/flag.png b/l10n/to/flag.png
index a4e054ea4..864e199a7 100644
--- a/l10n/to/flag.png
+++ b/l10n/to/flag.png
Binary files differ
diff --git a/l10n/tp/flag.png b/l10n/tp/flag.png
index fdc9580e2..6b73b58ff 100644
--- a/l10n/tp/flag.png
+++ b/l10n/tp/flag.png
Binary files differ
diff --git a/l10n/tr/flag.png b/l10n/tr/flag.png
index eeb31b9ab..4b0a75afe 100644
--- a/l10n/tr/flag.png
+++ b/l10n/tr/flag.png
Binary files differ
diff --git a/l10n/tt/flag.png b/l10n/tt/flag.png
index 55d4ac7c0..599aa9626 100644
--- a/l10n/tt/flag.png
+++ b/l10n/tt/flag.png
Binary files differ
diff --git a/l10n/tv/flag.png b/l10n/tv/flag.png
index 58023b6e6..06221fa64 100644
--- a/l10n/tv/flag.png
+++ b/l10n/tv/flag.png
Binary files differ
diff --git a/l10n/tw/flag.png b/l10n/tw/flag.png
index 8cac08474..5c502ec83 100644
--- a/l10n/tw/flag.png
+++ b/l10n/tw/flag.png
Binary files differ
diff --git a/l10n/tz/flag.png b/l10n/tz/flag.png
index 17dbf1009..61f410e27 100644
--- a/l10n/tz/flag.png
+++ b/l10n/tz/flag.png
Binary files differ
diff --git a/l10n/ua/flag.png b/l10n/ua/flag.png
index e639c6971..65958d4a2 100644
--- a/l10n/ua/flag.png
+++ b/l10n/ua/flag.png
Binary files differ
diff --git a/l10n/ug/flag.png b/l10n/ug/flag.png
index 8a67c8081..934fb9e79 100644
--- a/l10n/ug/flag.png
+++ b/l10n/ug/flag.png
Binary files differ
diff --git a/l10n/us/flag.png b/l10n/us/flag.png
index b93152483..904feebc4 100644
--- a/l10n/us/flag.png
+++ b/l10n/us/flag.png
Binary files differ
diff --git a/l10n/uy/flag.png b/l10n/uy/flag.png
index 958924552..09a7fb4eb 100644
--- a/l10n/uy/flag.png
+++ b/l10n/uy/flag.png
Binary files differ
diff --git a/l10n/uz/flag.png b/l10n/uz/flag.png
index a7736db5b..0cb007b50 100644
--- a/l10n/uz/flag.png
+++ b/l10n/uz/flag.png
Binary files differ
diff --git a/l10n/va/flag.png b/l10n/va/flag.png
index d1cebdab9..bec665957 100644
--- a/l10n/va/flag.png
+++ b/l10n/va/flag.png
Binary files differ
diff --git a/l10n/vc/flag.png b/l10n/vc/flag.png
index 0fd4ba5e2..f261d4efa 100644
--- a/l10n/vc/flag.png
+++ b/l10n/vc/flag.png
Binary files differ
diff --git a/l10n/ve/flag.png b/l10n/ve/flag.png
index 3bd73d49d..8901e4ed3 100644
--- a/l10n/ve/flag.png
+++ b/l10n/ve/flag.png
Binary files differ
diff --git a/l10n/vg/flag.png b/l10n/vg/flag.png
index 00893a7b4..e4e445e47 100644
--- a/l10n/vg/flag.png
+++ b/l10n/vg/flag.png
Binary files differ
diff --git a/l10n/vi/flag.png b/l10n/vi/flag.png
index e2458a287..23910e66b 100644
--- a/l10n/vi/flag.png
+++ b/l10n/vi/flag.png
Binary files differ
diff --git a/l10n/vn/flag.png b/l10n/vn/flag.png
index d77509ec2..ff3e26335 100644
--- a/l10n/vn/flag.png
+++ b/l10n/vn/flag.png
Binary files differ
diff --git a/l10n/vu/flag.png b/l10n/vu/flag.png
index 5912329e2..d7591ec8d 100644
--- a/l10n/vu/flag.png
+++ b/l10n/vu/flag.png
Binary files differ
diff --git a/l10n/wf/flag.png b/l10n/wf/flag.png
index e7f3b654c..c80e769c5 100644
--- a/l10n/wf/flag.png
+++ b/l10n/wf/flag.png
Binary files differ
diff --git a/l10n/ws/flag.png b/l10n/ws/flag.png
index 705d03530..ddccd3e26 100644
--- a/l10n/ws/flag.png
+++ b/l10n/ws/flag.png
Binary files differ
diff --git a/l10n/ye/flag.png b/l10n/ye/flag.png
index bcb54dfc2..9eb133070 100644
--- a/l10n/ye/flag.png
+++ b/l10n/ye/flag.png
Binary files differ
diff --git a/l10n/za/flag.png b/l10n/za/flag.png
index 0abb8fb5f..e3a28a3be 100644
--- a/l10n/za/flag.png
+++ b/l10n/za/flag.png
Binary files differ
diff --git a/l10n/zm/flag.png b/l10n/zm/flag.png
index 71de489f8..99b7aa1b9 100644
--- a/l10n/zm/flag.png
+++ b/l10n/zm/flag.png
Binary files differ
diff --git a/l10n/zw/flag.png b/l10n/zw/flag.png
index b06821f1d..5bfd4e96b 100644
--- a/l10n/zw/flag.png
+++ b/l10n/zw/flag.png
Binary files differ
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
index 90ef9754c..465cc318b 100644
--- a/libkonq/pics/arrow_bottomleft.png
+++ b/libkonq/pics/arrow_bottomleft.png
Binary files differ
diff --git a/libkonq/pics/arrow_bottomright.png b/libkonq/pics/arrow_bottomright.png
index 92f7c9c58..d5a9b14de 100644
--- a/libkonq/pics/arrow_bottomright.png
+++ b/libkonq/pics/arrow_bottomright.png
Binary files differ
diff --git a/libkonq/pics/arrow_topleft.png b/libkonq/pics/arrow_topleft.png
index b27b6df5c..755384497 100644
--- a/libkonq/pics/arrow_topleft.png
+++ b/libkonq/pics/arrow_topleft.png
Binary files differ
diff --git a/libkonq/pics/arrow_topright.png b/libkonq/pics/arrow_topright.png
index 624b2b213..7eb81aea2 100644
--- a/libkonq/pics/arrow_topright.png
+++ b/libkonq/pics/arrow_topright.png
Binary files differ
diff --git a/libkonq/pics/thumbnailfont_7x4.png b/libkonq/pics/thumbnailfont_7x4.png
index a442e3cab..1748996d2 100644
--- a/libkonq/pics/thumbnailfont_7x4.png
+++ b/libkonq/pics/thumbnailfont_7x4.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-acroread.png b/pics/crystalsvg/cr128-app-acroread.png
index 6a7226a48..ac3b1a0e0 100644
--- a/pics/crystalsvg/cr128-app-acroread.png
+++ b/pics/crystalsvg/cr128-app-acroread.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-applixware.png b/pics/crystalsvg/cr128-app-applixware.png
index 1c3bdd99e..202c80442 100644
--- a/pics/crystalsvg/cr128-app-applixware.png
+++ b/pics/crystalsvg/cr128-app-applixware.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-clanbomber.png b/pics/crystalsvg/cr128-app-clanbomber.png
index 264e93d32..b42ba4431 100644
--- a/pics/crystalsvg/cr128-app-clanbomber.png
+++ b/pics/crystalsvg/cr128-app-clanbomber.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-email.png b/pics/crystalsvg/cr128-app-email.png
index 8689982cc..145c940d5 100644
--- a/pics/crystalsvg/cr128-app-email.png
+++ b/pics/crystalsvg/cr128-app-email.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-gimp.png b/pics/crystalsvg/cr128-app-gimp.png
index b53b8e3f9..a7f725989 100644
--- a/pics/crystalsvg/cr128-app-gimp.png
+++ b/pics/crystalsvg/cr128-app-gimp.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-kfm_home.png b/pics/crystalsvg/cr128-app-kfm_home.png
index 1523d6e17..74e67ba7e 100644
--- a/pics/crystalsvg/cr128-app-kfm_home.png
+++ b/pics/crystalsvg/cr128-app-kfm_home.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-licq.png b/pics/crystalsvg/cr128-app-licq.png
index 9f960330f..f00704ccf 100644
--- a/pics/crystalsvg/cr128-app-licq.png
+++ b/pics/crystalsvg/cr128-app-licq.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-linuxconf.png b/pics/crystalsvg/cr128-app-linuxconf.png
index bfae3f800..ec453c5eb 100644
--- a/pics/crystalsvg/cr128-app-linuxconf.png
+++ b/pics/crystalsvg/cr128-app-linuxconf.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-netscape.png b/pics/crystalsvg/cr128-app-netscape.png
index e183115cb..505f2fb1e 100644
--- a/pics/crystalsvg/cr128-app-netscape.png
+++ b/pics/crystalsvg/cr128-app-netscape.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-package.png b/pics/crystalsvg/cr128-app-package.png
index 4fa61f263..0935d17d1 100644
--- a/pics/crystalsvg/cr128-app-package.png
+++ b/pics/crystalsvg/cr128-app-package.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-package_applications.png b/pics/crystalsvg/cr128-app-package_applications.png
index 87a851245..f4bf93703 100644
--- a/pics/crystalsvg/cr128-app-package_applications.png
+++ b/pics/crystalsvg/cr128-app-package_applications.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-package_favourite.png b/pics/crystalsvg/cr128-app-package_favourite.png
index cf6878d7c..8e16ca6a9 100644
--- a/pics/crystalsvg/cr128-app-package_favourite.png
+++ b/pics/crystalsvg/cr128-app-package_favourite.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-package_settings.png b/pics/crystalsvg/cr128-app-package_settings.png
index 3e82df6d2..091645e38 100644
--- a/pics/crystalsvg/cr128-app-package_settings.png
+++ b/pics/crystalsvg/cr128-app-package_settings.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-package_toys.png b/pics/crystalsvg/cr128-app-package_toys.png
index 4154e59ca..5b1b51ecd 100644
--- a/pics/crystalsvg/cr128-app-package_toys.png
+++ b/pics/crystalsvg/cr128-app-package_toys.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-penguin.png b/pics/crystalsvg/cr128-app-penguin.png
index eea4fc777..bda8fcb76 100644
--- a/pics/crystalsvg/cr128-app-penguin.png
+++ b/pics/crystalsvg/cr128-app-penguin.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-phppg.png b/pics/crystalsvg/cr128-app-phppg.png
index 8d29243e2..50de1662e 100644
--- a/pics/crystalsvg/cr128-app-phppg.png
+++ b/pics/crystalsvg/cr128-app-phppg.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-pysol.png b/pics/crystalsvg/cr128-app-pysol.png
index 2f962b00f..31601425e 100644
--- a/pics/crystalsvg/cr128-app-pysol.png
+++ b/pics/crystalsvg/cr128-app-pysol.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-randr.png b/pics/crystalsvg/cr128-app-randr.png
index 868003920..6b9736b12 100644
--- a/pics/crystalsvg/cr128-app-randr.png
+++ b/pics/crystalsvg/cr128-app-randr.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-staroffice.png b/pics/crystalsvg/cr128-app-staroffice.png
index a31773791..6afeb6684 100644
--- a/pics/crystalsvg/cr128-app-staroffice.png
+++ b/pics/crystalsvg/cr128-app-staroffice.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-systemtray.png b/pics/crystalsvg/cr128-app-systemtray.png
index a04e6c687..c9d1531b4 100644
--- a/pics/crystalsvg/cr128-app-systemtray.png
+++ b/pics/crystalsvg/cr128-app-systemtray.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-taskbar.png b/pics/crystalsvg/cr128-app-taskbar.png
index f825459c5..00351c4d7 100644
--- a/pics/crystalsvg/cr128-app-taskbar.png
+++ b/pics/crystalsvg/cr128-app-taskbar.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-terminal.png b/pics/crystalsvg/cr128-app-terminal.png
index 4ef0cc384..d21bb429a 100644
--- a/pics/crystalsvg/cr128-app-terminal.png
+++ b/pics/crystalsvg/cr128-app-terminal.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-tux.png b/pics/crystalsvg/cr128-app-tux.png
index 8e4e34b53..383006ad6 100644
--- a/pics/crystalsvg/cr128-app-tux.png
+++ b/pics/crystalsvg/cr128-app-tux.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-wp.png b/pics/crystalsvg/cr128-app-wp.png
index c4add3f3b..bfadf0634 100644
--- a/pics/crystalsvg/cr128-app-wp.png
+++ b/pics/crystalsvg/cr128-app-wp.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-xclock.png b/pics/crystalsvg/cr128-app-xclock.png
index 0dd2e1ef4..f0cbd9c13 100644
--- a/pics/crystalsvg/cr128-app-xclock.png
+++ b/pics/crystalsvg/cr128-app-xclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-xfmail.png b/pics/crystalsvg/cr128-app-xfmail.png
index 117958165..b004c20bc 100644
--- a/pics/crystalsvg/cr128-app-xfmail.png
+++ b/pics/crystalsvg/cr128-app-xfmail.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-app-xmag.png b/pics/crystalsvg/cr128-app-xmag.png
index 1808d40a8..7dbca3001 100644
--- a/pics/crystalsvg/cr128-app-xmag.png
+++ b/pics/crystalsvg/cr128-app-xmag.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-category-applications-development.png b/pics/crystalsvg/cr128-category-applications-development.png
index c43758599..73bc6feac 100644
--- a/pics/crystalsvg/cr128-category-applications-development.png
+++ b/pics/crystalsvg/cr128-category-applications-development.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-category-applications-games.png b/pics/crystalsvg/cr128-category-applications-games.png
index 6f2c874e1..8552722af 100644
--- a/pics/crystalsvg/cr128-category-applications-games.png
+++ b/pics/crystalsvg/cr128-category-applications-games.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-category-applications-internet.png b/pics/crystalsvg/cr128-category-applications-internet.png
index 6be3abf9d..7046d1af5 100644
--- a/pics/crystalsvg/cr128-category-applications-internet.png
+++ b/pics/crystalsvg/cr128-category-applications-internet.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-category-applications-multimedia.png b/pics/crystalsvg/cr128-category-applications-multimedia.png
index e04f1e181..eea921b25 100644
--- a/pics/crystalsvg/cr128-category-applications-multimedia.png
+++ b/pics/crystalsvg/cr128-category-applications-multimedia.png
Binary files differ
diff --git a/pics/crystalsvg/cr128-category-applications-utilities.png b/pics/crystalsvg/cr128-category-applications-utilities.png
index b07c23f92..4c978cb40 100644
--- a/pics/crystalsvg/cr128-category-applications-utilities.png
+++ b/pics/crystalsvg/cr128-category-applications-utilities.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-abiword.png b/pics/crystalsvg/cr16-app-abiword.png
index 6d540a466..4c8830fcd 100644
--- a/pics/crystalsvg/cr16-app-abiword.png
+++ b/pics/crystalsvg/cr16-app-abiword.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-acroread.png b/pics/crystalsvg/cr16-app-acroread.png
index e8efdbfa2..03494ef8b 100644
--- a/pics/crystalsvg/cr16-app-acroread.png
+++ b/pics/crystalsvg/cr16-app-acroread.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-alevt.png b/pics/crystalsvg/cr16-app-alevt.png
index 77fe43617..394b6528a 100644
--- a/pics/crystalsvg/cr16-app-alevt.png
+++ b/pics/crystalsvg/cr16-app-alevt.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-applixware.png b/pics/crystalsvg/cr16-app-applixware.png
index e782ec27a..2413ab524 100644
--- a/pics/crystalsvg/cr16-app-applixware.png
+++ b/pics/crystalsvg/cr16-app-applixware.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-assistant.png b/pics/crystalsvg/cr16-app-assistant.png
index 2e68ba50f..c1730a25b 100644
--- a/pics/crystalsvg/cr16-app-assistant.png
+++ b/pics/crystalsvg/cr16-app-assistant.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-blender.png b/pics/crystalsvg/cr16-app-blender.png
index 710e2af86..608f2d661 100644
--- a/pics/crystalsvg/cr16-app-blender.png
+++ b/pics/crystalsvg/cr16-app-blender.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-bluefish.png b/pics/crystalsvg/cr16-app-bluefish.png
index c51892e5f..660cb01f5 100644
--- a/pics/crystalsvg/cr16-app-bluefish.png
+++ b/pics/crystalsvg/cr16-app-bluefish.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-clanbomber.png b/pics/crystalsvg/cr16-app-clanbomber.png
index 3b64d4651..c1c32e38b 100644
--- a/pics/crystalsvg/cr16-app-clanbomber.png
+++ b/pics/crystalsvg/cr16-app-clanbomber.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-designer.png b/pics/crystalsvg/cr16-app-designer.png
index ff3f99bd1..f01f6fed0 100644
--- a/pics/crystalsvg/cr16-app-designer.png
+++ b/pics/crystalsvg/cr16-app-designer.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-dia.png b/pics/crystalsvg/cr16-app-dia.png
index 1a231ef33..6f99c665e 100644
--- a/pics/crystalsvg/cr16-app-dia.png
+++ b/pics/crystalsvg/cr16-app-dia.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-dlgedit.png b/pics/crystalsvg/cr16-app-dlgedit.png
index d19b0e1b6..2eee02783 100644
--- a/pics/crystalsvg/cr16-app-dlgedit.png
+++ b/pics/crystalsvg/cr16-app-dlgedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-eclipse.png b/pics/crystalsvg/cr16-app-eclipse.png
index 55e428ae1..eb17b76f2 100644
--- a/pics/crystalsvg/cr16-app-eclipse.png
+++ b/pics/crystalsvg/cr16-app-eclipse.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-edu_languages.png b/pics/crystalsvg/cr16-app-edu_languages.png
index 16b0de147..a8ec19da5 100644
--- a/pics/crystalsvg/cr16-app-edu_languages.png
+++ b/pics/crystalsvg/cr16-app-edu_languages.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-edu_mathematics.png b/pics/crystalsvg/cr16-app-edu_mathematics.png
index 7d26d9937..394e23a79 100644
--- a/pics/crystalsvg/cr16-app-edu_mathematics.png
+++ b/pics/crystalsvg/cr16-app-edu_mathematics.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-edu_miscellaneous.png b/pics/crystalsvg/cr16-app-edu_miscellaneous.png
index 619a1b110..2d9a5438d 100644
--- a/pics/crystalsvg/cr16-app-edu_miscellaneous.png
+++ b/pics/crystalsvg/cr16-app-edu_miscellaneous.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-emacs.png b/pics/crystalsvg/cr16-app-emacs.png
index c86092f50..3cd1323be 100644
--- a/pics/crystalsvg/cr16-app-emacs.png
+++ b/pics/crystalsvg/cr16-app-emacs.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-email.png b/pics/crystalsvg/cr16-app-email.png
index 45f313f07..c1a8cea0e 100644
--- a/pics/crystalsvg/cr16-app-email.png
+++ b/pics/crystalsvg/cr16-app-email.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-evolution.png b/pics/crystalsvg/cr16-app-evolution.png
index 99b1d6e72..428dba5a9 100644
--- a/pics/crystalsvg/cr16-app-evolution.png
+++ b/pics/crystalsvg/cr16-app-evolution.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-fifteenpieces.png b/pics/crystalsvg/cr16-app-fifteenpieces.png
index 8b9e0338c..76b8e89eb 100644
--- a/pics/crystalsvg/cr16-app-fifteenpieces.png
+++ b/pics/crystalsvg/cr16-app-fifteenpieces.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gabber.png b/pics/crystalsvg/cr16-app-gabber.png
index 99a32c715..82f2b868d 100644
--- a/pics/crystalsvg/cr16-app-gabber.png
+++ b/pics/crystalsvg/cr16-app-gabber.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gaim.png b/pics/crystalsvg/cr16-app-gaim.png
index 8b98076ba..aea028fdf 100644
--- a/pics/crystalsvg/cr16-app-gaim.png
+++ b/pics/crystalsvg/cr16-app-gaim.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gimp.png b/pics/crystalsvg/cr16-app-gimp.png
index f2d02ecd0..13d9850a5 100644
--- a/pics/crystalsvg/cr16-app-gimp.png
+++ b/pics/crystalsvg/cr16-app-gimp.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gnome_apps.png b/pics/crystalsvg/cr16-app-gnome_apps.png
index 1edc2381c..a0145cac8 100644
--- a/pics/crystalsvg/cr16-app-gnome_apps.png
+++ b/pics/crystalsvg/cr16-app-gnome_apps.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gnomemeeting.png b/pics/crystalsvg/cr16-app-gnomemeeting.png
index 11a31e9ef..bdd1f76a7 100644
--- a/pics/crystalsvg/cr16-app-gnomemeeting.png
+++ b/pics/crystalsvg/cr16-app-gnomemeeting.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gnucash.png b/pics/crystalsvg/cr16-app-gnucash.png
index f2a11f070..4b30664cf 100644
--- a/pics/crystalsvg/cr16-app-gnucash.png
+++ b/pics/crystalsvg/cr16-app-gnucash.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gnumeric.png b/pics/crystalsvg/cr16-app-gnumeric.png
index 816db283f..0ddf8c73a 100644
--- a/pics/crystalsvg/cr16-app-gnumeric.png
+++ b/pics/crystalsvg/cr16-app-gnumeric.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gv.png b/pics/crystalsvg/cr16-app-gv.png
index f21b3abfc..b879ae36a 100644
--- a/pics/crystalsvg/cr16-app-gv.png
+++ b/pics/crystalsvg/cr16-app-gv.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-gvim.png b/pics/crystalsvg/cr16-app-gvim.png
index b0859d663..48dd18fb5 100644
--- a/pics/crystalsvg/cr16-app-gvim.png
+++ b/pics/crystalsvg/cr16-app-gvim.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-kbinaryclock.png b/pics/crystalsvg/cr16-app-kbinaryclock.png
index 2a3b4b78a..3a1323013 100644
--- a/pics/crystalsvg/cr16-app-kbinaryclock.png
+++ b/pics/crystalsvg/cr16-app-kbinaryclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-kfm_home.png b/pics/crystalsvg/cr16-app-kfm_home.png
index 3d26af552..d10c2805b 100644
--- a/pics/crystalsvg/cr16-app-kfm_home.png
+++ b/pics/crystalsvg/cr16-app-kfm_home.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-kvirc.png b/pics/crystalsvg/cr16-app-kvirc.png
index a710376f2..c131c95f1 100644
--- a/pics/crystalsvg/cr16-app-kvirc.png
+++ b/pics/crystalsvg/cr16-app-kvirc.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-licq.png b/pics/crystalsvg/cr16-app-licq.png
index bd386e6c5..69d477ab5 100644
--- a/pics/crystalsvg/cr16-app-licq.png
+++ b/pics/crystalsvg/cr16-app-licq.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-linguist.png b/pics/crystalsvg/cr16-app-linguist.png
index 90ac6bf8f..e5d415022 100644
--- a/pics/crystalsvg/cr16-app-linguist.png
+++ b/pics/crystalsvg/cr16-app-linguist.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-linuxconf.png b/pics/crystalsvg/cr16-app-linuxconf.png
index e71918693..e9c5756a8 100644
--- a/pics/crystalsvg/cr16-app-linuxconf.png
+++ b/pics/crystalsvg/cr16-app-linuxconf.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-lyx.png b/pics/crystalsvg/cr16-app-lyx.png
index 6b575cc1b..8a1090264 100644
--- a/pics/crystalsvg/cr16-app-lyx.png
+++ b/pics/crystalsvg/cr16-app-lyx.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-mathematica.png b/pics/crystalsvg/cr16-app-mathematica.png
index 702720311..81ee29ebc 100644
--- a/pics/crystalsvg/cr16-app-mathematica.png
+++ b/pics/crystalsvg/cr16-app-mathematica.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-nedit.png b/pics/crystalsvg/cr16-app-nedit.png
index dca0c69df..09c1232e4 100644
--- a/pics/crystalsvg/cr16-app-nedit.png
+++ b/pics/crystalsvg/cr16-app-nedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-netscape.png b/pics/crystalsvg/cr16-app-netscape.png
index 3b1aa91cc..50bb95250 100644
--- a/pics/crystalsvg/cr16-app-netscape.png
+++ b/pics/crystalsvg/cr16-app-netscape.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-opera.png b/pics/crystalsvg/cr16-app-opera.png
index 4694c2bca..16b6280b5 100644
--- a/pics/crystalsvg/cr16-app-opera.png
+++ b/pics/crystalsvg/cr16-app-opera.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package.png b/pics/crystalsvg/cr16-app-package.png
index d85d33956..5a363f95b 100644
--- a/pics/crystalsvg/cr16-app-package.png
+++ b/pics/crystalsvg/cr16-app-package.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_application.png b/pics/crystalsvg/cr16-app-package_application.png
index 929f66474..c5dd1f976 100644
--- a/pics/crystalsvg/cr16-app-package_application.png
+++ b/pics/crystalsvg/cr16-app-package_application.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_applications.png b/pics/crystalsvg/cr16-app-package_applications.png
index dd6de2f62..ca736b7e0 100644
--- a/pics/crystalsvg/cr16-app-package_applications.png
+++ b/pics/crystalsvg/cr16-app-package_applications.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_editors.png b/pics/crystalsvg/cr16-app-package_editors.png
index 47d39deb9..2c1deb1da 100644
--- a/pics/crystalsvg/cr16-app-package_editors.png
+++ b/pics/crystalsvg/cr16-app-package_editors.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_edutainment.png b/pics/crystalsvg/cr16-app-package_edutainment.png
index 8e4b0e992..1a5a094d5 100644
--- a/pics/crystalsvg/cr16-app-package_edutainment.png
+++ b/pics/crystalsvg/cr16-app-package_edutainment.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_favourite.png b/pics/crystalsvg/cr16-app-package_favourite.png
index f5351479c..6e10008b2 100644
--- a/pics/crystalsvg/cr16-app-package_favourite.png
+++ b/pics/crystalsvg/cr16-app-package_favourite.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_games_arcade.png b/pics/crystalsvg/cr16-app-package_games_arcade.png
index cd0b07d62..9f84d6847 100644
--- a/pics/crystalsvg/cr16-app-package_games_arcade.png
+++ b/pics/crystalsvg/cr16-app-package_games_arcade.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_games_board.png b/pics/crystalsvg/cr16-app-package_games_board.png
index cc3a781e4..3e38df36c 100644
--- a/pics/crystalsvg/cr16-app-package_games_board.png
+++ b/pics/crystalsvg/cr16-app-package_games_board.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_games_card.png b/pics/crystalsvg/cr16-app-package_games_card.png
index 09fa37e38..95d1274e5 100644
--- a/pics/crystalsvg/cr16-app-package_games_card.png
+++ b/pics/crystalsvg/cr16-app-package_games_card.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_games_kids.png b/pics/crystalsvg/cr16-app-package_games_kids.png
index 1ee436cc7..3c768a350 100644
--- a/pics/crystalsvg/cr16-app-package_games_kids.png
+++ b/pics/crystalsvg/cr16-app-package_games_kids.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_games_strategy.png b/pics/crystalsvg/cr16-app-package_games_strategy.png
index 7765f7459..aaafd3d83 100644
--- a/pics/crystalsvg/cr16-app-package_games_strategy.png
+++ b/pics/crystalsvg/cr16-app-package_games_strategy.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_settings.png b/pics/crystalsvg/cr16-app-package_settings.png
index 8bc9a0faf..06e060a5f 100644
--- a/pics/crystalsvg/cr16-app-package_settings.png
+++ b/pics/crystalsvg/cr16-app-package_settings.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_system.png b/pics/crystalsvg/cr16-app-package_system.png
index b97bfb434..b41c29633 100644
--- a/pics/crystalsvg/cr16-app-package_system.png
+++ b/pics/crystalsvg/cr16-app-package_system.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-package_toys.png b/pics/crystalsvg/cr16-app-package_toys.png
index a2ad6b83d..d5b924e90 100644
--- a/pics/crystalsvg/cr16-app-package_toys.png
+++ b/pics/crystalsvg/cr16-app-package_toys.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-pan.png b/pics/crystalsvg/cr16-app-pan.png
index 2b7eb5d77..810e4b4fd 100644
--- a/pics/crystalsvg/cr16-app-pan.png
+++ b/pics/crystalsvg/cr16-app-pan.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-penguin.png b/pics/crystalsvg/cr16-app-penguin.png
index a99e61179..3c25e564c 100644
--- a/pics/crystalsvg/cr16-app-penguin.png
+++ b/pics/crystalsvg/cr16-app-penguin.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-phppg.png b/pics/crystalsvg/cr16-app-phppg.png
index 63d0802c7..61ec70b99 100644
--- a/pics/crystalsvg/cr16-app-phppg.png
+++ b/pics/crystalsvg/cr16-app-phppg.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-plan.png b/pics/crystalsvg/cr16-app-plan.png
index f761f2c92..a210d8f62 100644
--- a/pics/crystalsvg/cr16-app-plan.png
+++ b/pics/crystalsvg/cr16-app-plan.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-planner.png b/pics/crystalsvg/cr16-app-planner.png
index 56c1d74eb..c6303160b 100644
--- a/pics/crystalsvg/cr16-app-planner.png
+++ b/pics/crystalsvg/cr16-app-planner.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-pybliographic.png b/pics/crystalsvg/cr16-app-pybliographic.png
index 68eb9e05b..bbe6d21d3 100644
--- a/pics/crystalsvg/cr16-app-pybliographic.png
+++ b/pics/crystalsvg/cr16-app-pybliographic.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-randr.png b/pics/crystalsvg/cr16-app-randr.png
index 9dd3bf9ca..a6d25c0cd 100644
--- a/pics/crystalsvg/cr16-app-randr.png
+++ b/pics/crystalsvg/cr16-app-randr.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-realplayer.png b/pics/crystalsvg/cr16-app-realplayer.png
index d29d81d97..4e2adfb36 100644
--- a/pics/crystalsvg/cr16-app-realplayer.png
+++ b/pics/crystalsvg/cr16-app-realplayer.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-remote.png b/pics/crystalsvg/cr16-app-remote.png
index 9de8a241c..168ba051a 100644
--- a/pics/crystalsvg/cr16-app-remote.png
+++ b/pics/crystalsvg/cr16-app-remote.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-runprocesscatcher.png b/pics/crystalsvg/cr16-app-runprocesscatcher.png
index 4553e305a..34488352b 100644
--- a/pics/crystalsvg/cr16-app-runprocesscatcher.png
+++ b/pics/crystalsvg/cr16-app-runprocesscatcher.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-scribus.png b/pics/crystalsvg/cr16-app-scribus.png
index efc9460b2..61b4b108d 100644
--- a/pics/crystalsvg/cr16-app-scribus.png
+++ b/pics/crystalsvg/cr16-app-scribus.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-sodipodi.png b/pics/crystalsvg/cr16-app-sodipodi.png
index 31b522a42..495d622a1 100644
--- a/pics/crystalsvg/cr16-app-sodipodi.png
+++ b/pics/crystalsvg/cr16-app-sodipodi.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-systemtray.png b/pics/crystalsvg/cr16-app-systemtray.png
index e46643064..e35ff2ee9 100644
--- a/pics/crystalsvg/cr16-app-systemtray.png
+++ b/pics/crystalsvg/cr16-app-systemtray.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-terminal.png b/pics/crystalsvg/cr16-app-terminal.png
index 75fa314a7..be95c6150 100644
--- a/pics/crystalsvg/cr16-app-terminal.png
+++ b/pics/crystalsvg/cr16-app-terminal.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-tux.png b/pics/crystalsvg/cr16-app-tux.png
index db2e8b7bb..9a3c96146 100644
--- a/pics/crystalsvg/cr16-app-tux.png
+++ b/pics/crystalsvg/cr16-app-tux.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-vnc.png b/pics/crystalsvg/cr16-app-vnc.png
index 4c4e7e429..65f8af4ee 100644
--- a/pics/crystalsvg/cr16-app-vnc.png
+++ b/pics/crystalsvg/cr16-app-vnc.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-wabi.png b/pics/crystalsvg/cr16-app-wabi.png
index c22b0e24c..827592c1a 100644
--- a/pics/crystalsvg/cr16-app-wabi.png
+++ b/pics/crystalsvg/cr16-app-wabi.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-wine.png b/pics/crystalsvg/cr16-app-wine.png
index e30dabd1a..87c37d171 100644
--- a/pics/crystalsvg/cr16-app-wine.png
+++ b/pics/crystalsvg/cr16-app-wine.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-wp.png b/pics/crystalsvg/cr16-app-wp.png
index 6362c7fbc..79e572727 100644
--- a/pics/crystalsvg/cr16-app-wp.png
+++ b/pics/crystalsvg/cr16-app-wp.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xcalc.png b/pics/crystalsvg/cr16-app-xcalc.png
index adb921875..9e8ef2ad4 100644
--- a/pics/crystalsvg/cr16-app-xcalc.png
+++ b/pics/crystalsvg/cr16-app-xcalc.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xchat.png b/pics/crystalsvg/cr16-app-xchat.png
index a23a71152..3a1b940b0 100644
--- a/pics/crystalsvg/cr16-app-xchat.png
+++ b/pics/crystalsvg/cr16-app-xchat.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xclipboard.png b/pics/crystalsvg/cr16-app-xclipboard.png
index de99fd7c6..d3a0dcbde 100644
--- a/pics/crystalsvg/cr16-app-xclipboard.png
+++ b/pics/crystalsvg/cr16-app-xclipboard.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xclock.png b/pics/crystalsvg/cr16-app-xclock.png
index 9b32a31a8..292c88ac5 100644
--- a/pics/crystalsvg/cr16-app-xclock.png
+++ b/pics/crystalsvg/cr16-app-xclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xconsole.png b/pics/crystalsvg/cr16-app-xconsole.png
index bc128c0a4..d824b0ae3 100644
--- a/pics/crystalsvg/cr16-app-xconsole.png
+++ b/pics/crystalsvg/cr16-app-xconsole.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xedit.png b/pics/crystalsvg/cr16-app-xedit.png
index 8a03b6dc5..92c0493ef 100644
--- a/pics/crystalsvg/cr16-app-xedit.png
+++ b/pics/crystalsvg/cr16-app-xedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xemacs.png b/pics/crystalsvg/cr16-app-xemacs.png
index 24ec2d707..94e2c7755 100644
--- a/pics/crystalsvg/cr16-app-xemacs.png
+++ b/pics/crystalsvg/cr16-app-xemacs.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xeyes.png b/pics/crystalsvg/cr16-app-xeyes.png
index 20d06b2fe..4b6f7e7fd 100644
--- a/pics/crystalsvg/cr16-app-xeyes.png
+++ b/pics/crystalsvg/cr16-app-xeyes.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xfig.png b/pics/crystalsvg/cr16-app-xfig.png
index 48f00f631..1d0c0840b 100644
--- a/pics/crystalsvg/cr16-app-xfig.png
+++ b/pics/crystalsvg/cr16-app-xfig.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xfmail.png b/pics/crystalsvg/cr16-app-xfmail.png
index 4d8068466..61c32bacd 100644
--- a/pics/crystalsvg/cr16-app-xfmail.png
+++ b/pics/crystalsvg/cr16-app-xfmail.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xload.png b/pics/crystalsvg/cr16-app-xload.png
index 638df5dfa..030e98b32 100644
--- a/pics/crystalsvg/cr16-app-xload.png
+++ b/pics/crystalsvg/cr16-app-xload.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xmag.png b/pics/crystalsvg/cr16-app-xmag.png
index 5cf09b774..c7b8abe22 100644
--- a/pics/crystalsvg/cr16-app-xmag.png
+++ b/pics/crystalsvg/cr16-app-xmag.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xmms.png b/pics/crystalsvg/cr16-app-xmms.png
index f48b7dee4..a8c713ea4 100644
--- a/pics/crystalsvg/cr16-app-xmms.png
+++ b/pics/crystalsvg/cr16-app-xmms.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xosview.png b/pics/crystalsvg/cr16-app-xosview.png
index 2034b69ec..156e3cf9d 100644
--- a/pics/crystalsvg/cr16-app-xosview.png
+++ b/pics/crystalsvg/cr16-app-xosview.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xpaint.png b/pics/crystalsvg/cr16-app-xpaint.png
index 1d0ce977e..b01e77430 100644
--- a/pics/crystalsvg/cr16-app-xpaint.png
+++ b/pics/crystalsvg/cr16-app-xpaint.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-app-xv.png b/pics/crystalsvg/cr16-app-xv.png
index d7bbe29a4..108a64d5b 100644
--- a/pics/crystalsvg/cr16-app-xv.png
+++ b/pics/crystalsvg/cr16-app-xv.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-category-applications-development.png b/pics/crystalsvg/cr16-category-applications-development.png
index 17d48694d..7f0e05255 100644
--- a/pics/crystalsvg/cr16-category-applications-development.png
+++ b/pics/crystalsvg/cr16-category-applications-development.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-category-applications-games.png b/pics/crystalsvg/cr16-category-applications-games.png
index 61dcedc5e..84dea14e8 100644
--- a/pics/crystalsvg/cr16-category-applications-games.png
+++ b/pics/crystalsvg/cr16-category-applications-games.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-category-applications-graphics.png b/pics/crystalsvg/cr16-category-applications-graphics.png
index 79b1d8877..a85d007d9 100644
--- a/pics/crystalsvg/cr16-category-applications-graphics.png
+++ b/pics/crystalsvg/cr16-category-applications-graphics.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-category-applications-internet.png b/pics/crystalsvg/cr16-category-applications-internet.png
index 5acff48dd..9801f62e9 100644
--- a/pics/crystalsvg/cr16-category-applications-internet.png
+++ b/pics/crystalsvg/cr16-category-applications-internet.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-category-applications-multimedia.png b/pics/crystalsvg/cr16-category-applications-multimedia.png
index b27588d74..78c590428 100644
--- a/pics/crystalsvg/cr16-category-applications-multimedia.png
+++ b/pics/crystalsvg/cr16-category-applications-multimedia.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-category-applications-office.png b/pics/crystalsvg/cr16-category-applications-office.png
index e2ed6b17b..161192e84 100644
--- a/pics/crystalsvg/cr16-category-applications-office.png
+++ b/pics/crystalsvg/cr16-category-applications-office.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-category-applications-science.png b/pics/crystalsvg/cr16-category-applications-science.png
index e954b71e7..1c021acf8 100644
--- a/pics/crystalsvg/cr16-category-applications-science.png
+++ b/pics/crystalsvg/cr16-category-applications-science.png
Binary files differ
diff --git a/pics/crystalsvg/cr16-category-applications-utilities.png b/pics/crystalsvg/cr16-category-applications-utilities.png
index 41709f8b7..56e0dfd61 100644
--- a/pics/crystalsvg/cr16-category-applications-utilities.png
+++ b/pics/crystalsvg/cr16-category-applications-utilities.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-email.png b/pics/crystalsvg/cr22-app-email.png
index 2badba2c3..f5ae53319 100644
--- a/pics/crystalsvg/cr22-app-email.png
+++ b/pics/crystalsvg/cr22-app-email.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-fifteenpieces.png b/pics/crystalsvg/cr22-app-fifteenpieces.png
index 5e349d8f5..4b7ecf4f6 100644
--- a/pics/crystalsvg/cr22-app-fifteenpieces.png
+++ b/pics/crystalsvg/cr22-app-fifteenpieces.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-kbinaryclock.png b/pics/crystalsvg/cr22-app-kbinaryclock.png
index b9c029073..3d29af426 100644
--- a/pics/crystalsvg/cr22-app-kbinaryclock.png
+++ b/pics/crystalsvg/cr22-app-kbinaryclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-kvirc.png b/pics/crystalsvg/cr22-app-kvirc.png
index d5be8ff26..602d18883 100644
--- a/pics/crystalsvg/cr22-app-kvirc.png
+++ b/pics/crystalsvg/cr22-app-kvirc.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-nedit.png b/pics/crystalsvg/cr22-app-nedit.png
index 9a68562eb..92962ac15 100644
--- a/pics/crystalsvg/cr22-app-nedit.png
+++ b/pics/crystalsvg/cr22-app-nedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-randr.png b/pics/crystalsvg/cr22-app-randr.png
index 4552c512b..e398e0bb5 100644
--- a/pics/crystalsvg/cr22-app-randr.png
+++ b/pics/crystalsvg/cr22-app-randr.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-runprocesscatcher.png b/pics/crystalsvg/cr22-app-runprocesscatcher.png
index 1088baff5..33f0f5f9f 100644
--- a/pics/crystalsvg/cr22-app-runprocesscatcher.png
+++ b/pics/crystalsvg/cr22-app-runprocesscatcher.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-systemtray.png b/pics/crystalsvg/cr22-app-systemtray.png
index e4d5f5558..b2e1d235d 100644
--- a/pics/crystalsvg/cr22-app-systemtray.png
+++ b/pics/crystalsvg/cr22-app-systemtray.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-app-taskbar.png b/pics/crystalsvg/cr22-app-taskbar.png
index ec3006cf6..6daaac53a 100644
--- a/pics/crystalsvg/cr22-app-taskbar.png
+++ b/pics/crystalsvg/cr22-app-taskbar.png
Binary files differ
diff --git a/pics/crystalsvg/cr22-category-applications-development.png b/pics/crystalsvg/cr22-category-applications-development.png
index 0b641027d..57fbb7c9b 100644
--- a/pics/crystalsvg/cr22-category-applications-development.png
+++ b/pics/crystalsvg/cr22-category-applications-development.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-abiword.png b/pics/crystalsvg/cr32-app-abiword.png
index b18e136dd..639439a09 100644
--- a/pics/crystalsvg/cr32-app-abiword.png
+++ b/pics/crystalsvg/cr32-app-abiword.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-acroread.png b/pics/crystalsvg/cr32-app-acroread.png
index 9b36995d6..7e3e8900d 100644
--- a/pics/crystalsvg/cr32-app-acroread.png
+++ b/pics/crystalsvg/cr32-app-acroread.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-alevt.png b/pics/crystalsvg/cr32-app-alevt.png
index 892def18c..a3fb981a6 100644
--- a/pics/crystalsvg/cr32-app-alevt.png
+++ b/pics/crystalsvg/cr32-app-alevt.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-applixware.png b/pics/crystalsvg/cr32-app-applixware.png
index 4a625f3c1..d3b9b873f 100644
--- a/pics/crystalsvg/cr32-app-applixware.png
+++ b/pics/crystalsvg/cr32-app-applixware.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-blender.png b/pics/crystalsvg/cr32-app-blender.png
index 1d4cdd013..a9362a92e 100644
--- a/pics/crystalsvg/cr32-app-blender.png
+++ b/pics/crystalsvg/cr32-app-blender.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-bluefish.png b/pics/crystalsvg/cr32-app-bluefish.png
index 845f196de..2cfb880a8 100644
--- a/pics/crystalsvg/cr32-app-bluefish.png
+++ b/pics/crystalsvg/cr32-app-bluefish.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-clanbomber.png b/pics/crystalsvg/cr32-app-clanbomber.png
index c47444a86..0dfea7ae8 100644
--- a/pics/crystalsvg/cr32-app-clanbomber.png
+++ b/pics/crystalsvg/cr32-app-clanbomber.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-designer.png b/pics/crystalsvg/cr32-app-designer.png
index 3f6fa7a10..ce807175a 100644
--- a/pics/crystalsvg/cr32-app-designer.png
+++ b/pics/crystalsvg/cr32-app-designer.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-dia.png b/pics/crystalsvg/cr32-app-dia.png
index 12277c70f..447bc8ac6 100644
--- a/pics/crystalsvg/cr32-app-dia.png
+++ b/pics/crystalsvg/cr32-app-dia.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-dlgedit.png b/pics/crystalsvg/cr32-app-dlgedit.png
index 55ff5268d..fbd2ef1e8 100644
--- a/pics/crystalsvg/cr32-app-dlgedit.png
+++ b/pics/crystalsvg/cr32-app-dlgedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-eclipse.png b/pics/crystalsvg/cr32-app-eclipse.png
index ad214a283..f17edc48b 100644
--- a/pics/crystalsvg/cr32-app-eclipse.png
+++ b/pics/crystalsvg/cr32-app-eclipse.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-edu_languages.png b/pics/crystalsvg/cr32-app-edu_languages.png
index 616d9c6c1..e83da5b97 100644
--- a/pics/crystalsvg/cr32-app-edu_languages.png
+++ b/pics/crystalsvg/cr32-app-edu_languages.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-edu_mathematics.png b/pics/crystalsvg/cr32-app-edu_mathematics.png
index 004e5c30f..009b70b2b 100644
--- a/pics/crystalsvg/cr32-app-edu_mathematics.png
+++ b/pics/crystalsvg/cr32-app-edu_mathematics.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-edu_miscellaneous.png b/pics/crystalsvg/cr32-app-edu_miscellaneous.png
index cb8564230..a99e0566b 100644
--- a/pics/crystalsvg/cr32-app-edu_miscellaneous.png
+++ b/pics/crystalsvg/cr32-app-edu_miscellaneous.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-emacs.png b/pics/crystalsvg/cr32-app-emacs.png
index b8a9453a6..2c5aae3ea 100644
--- a/pics/crystalsvg/cr32-app-emacs.png
+++ b/pics/crystalsvg/cr32-app-emacs.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-email.png b/pics/crystalsvg/cr32-app-email.png
index 0ae28269d..ed39eb20d 100644
--- a/pics/crystalsvg/cr32-app-email.png
+++ b/pics/crystalsvg/cr32-app-email.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-evolution.png b/pics/crystalsvg/cr32-app-evolution.png
index 0310b2fbf..781d46121 100644
--- a/pics/crystalsvg/cr32-app-evolution.png
+++ b/pics/crystalsvg/cr32-app-evolution.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-fifteenpieces.png b/pics/crystalsvg/cr32-app-fifteenpieces.png
index e36afe078..7703d64e6 100644
--- a/pics/crystalsvg/cr32-app-fifteenpieces.png
+++ b/pics/crystalsvg/cr32-app-fifteenpieces.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gabber.png b/pics/crystalsvg/cr32-app-gabber.png
index c097c3f9d..ba124ed22 100644
--- a/pics/crystalsvg/cr32-app-gabber.png
+++ b/pics/crystalsvg/cr32-app-gabber.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gaim.png b/pics/crystalsvg/cr32-app-gaim.png
index d8b1d8e0f..edca82921 100644
--- a/pics/crystalsvg/cr32-app-gaim.png
+++ b/pics/crystalsvg/cr32-app-gaim.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-galeon.png b/pics/crystalsvg/cr32-app-galeon.png
index 440b4c3c4..23c695fdd 100644
--- a/pics/crystalsvg/cr32-app-galeon.png
+++ b/pics/crystalsvg/cr32-app-galeon.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gimp.png b/pics/crystalsvg/cr32-app-gimp.png
index c4353fd31..dfa67814b 100644
--- a/pics/crystalsvg/cr32-app-gimp.png
+++ b/pics/crystalsvg/cr32-app-gimp.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gnome_apps.png b/pics/crystalsvg/cr32-app-gnome_apps.png
index 6c049d6df..79cb99f3a 100644
--- a/pics/crystalsvg/cr32-app-gnome_apps.png
+++ b/pics/crystalsvg/cr32-app-gnome_apps.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gnomemeeting.png b/pics/crystalsvg/cr32-app-gnomemeeting.png
index fdc85d1cc..0c26d023c 100644
--- a/pics/crystalsvg/cr32-app-gnomemeeting.png
+++ b/pics/crystalsvg/cr32-app-gnomemeeting.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gnucash.png b/pics/crystalsvg/cr32-app-gnucash.png
index 27af45260..079e66dcb 100644
--- a/pics/crystalsvg/cr32-app-gnucash.png
+++ b/pics/crystalsvg/cr32-app-gnucash.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gnumeric.png b/pics/crystalsvg/cr32-app-gnumeric.png
index c932059bf..bb832c7da 100644
--- a/pics/crystalsvg/cr32-app-gnumeric.png
+++ b/pics/crystalsvg/cr32-app-gnumeric.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gv.png b/pics/crystalsvg/cr32-app-gv.png
index 13e6e93f7..fbde43b7c 100644
--- a/pics/crystalsvg/cr32-app-gv.png
+++ b/pics/crystalsvg/cr32-app-gv.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-gvim.png b/pics/crystalsvg/cr32-app-gvim.png
index 961040c57..5291ea2e8 100644
--- a/pics/crystalsvg/cr32-app-gvim.png
+++ b/pics/crystalsvg/cr32-app-gvim.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-kbinaryclock.png b/pics/crystalsvg/cr32-app-kbinaryclock.png
index efe213798..b8138f316 100644
--- a/pics/crystalsvg/cr32-app-kbinaryclock.png
+++ b/pics/crystalsvg/cr32-app-kbinaryclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-kfm_home.png b/pics/crystalsvg/cr32-app-kfm_home.png
index baa8912e9..26edef228 100644
--- a/pics/crystalsvg/cr32-app-kfm_home.png
+++ b/pics/crystalsvg/cr32-app-kfm_home.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-kvirc.png b/pics/crystalsvg/cr32-app-kvirc.png
index a64368395..29f51b1f8 100644
--- a/pics/crystalsvg/cr32-app-kvirc.png
+++ b/pics/crystalsvg/cr32-app-kvirc.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-licq.png b/pics/crystalsvg/cr32-app-licq.png
index ea2cd780f..a2926053e 100644
--- a/pics/crystalsvg/cr32-app-licq.png
+++ b/pics/crystalsvg/cr32-app-licq.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-linuxconf.png b/pics/crystalsvg/cr32-app-linuxconf.png
index 50372f43f..8b6b63554 100644
--- a/pics/crystalsvg/cr32-app-linuxconf.png
+++ b/pics/crystalsvg/cr32-app-linuxconf.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-lyx.png b/pics/crystalsvg/cr32-app-lyx.png
index f5cf36e63..a2d8fe2a7 100644
--- a/pics/crystalsvg/cr32-app-lyx.png
+++ b/pics/crystalsvg/cr32-app-lyx.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-mathematica.png b/pics/crystalsvg/cr32-app-mathematica.png
index 00a41ac93..bd488d098 100644
--- a/pics/crystalsvg/cr32-app-mathematica.png
+++ b/pics/crystalsvg/cr32-app-mathematica.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-nedit.png b/pics/crystalsvg/cr32-app-nedit.png
index a10490ceb..61c526f8f 100644
--- a/pics/crystalsvg/cr32-app-nedit.png
+++ b/pics/crystalsvg/cr32-app-nedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-netscape.png b/pics/crystalsvg/cr32-app-netscape.png
index 45f419019..bc7998d2f 100644
--- a/pics/crystalsvg/cr32-app-netscape.png
+++ b/pics/crystalsvg/cr32-app-netscape.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-opera.png b/pics/crystalsvg/cr32-app-opera.png
index 616f3ab6d..0b8c9319b 100644
--- a/pics/crystalsvg/cr32-app-opera.png
+++ b/pics/crystalsvg/cr32-app-opera.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package.png b/pics/crystalsvg/cr32-app-package.png
index e13d3d500..d2b8c06ea 100644
--- a/pics/crystalsvg/cr32-app-package.png
+++ b/pics/crystalsvg/cr32-app-package.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_applications.png b/pics/crystalsvg/cr32-app-package_applications.png
index 4d531001c..8283bba3d 100644
--- a/pics/crystalsvg/cr32-app-package_applications.png
+++ b/pics/crystalsvg/cr32-app-package_applications.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_editors.png b/pics/crystalsvg/cr32-app-package_editors.png
index 80785470d..6b5c245f3 100644
--- a/pics/crystalsvg/cr32-app-package_editors.png
+++ b/pics/crystalsvg/cr32-app-package_editors.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_edutainment.png b/pics/crystalsvg/cr32-app-package_edutainment.png
index b0a7fecbe..a99e0566b 100644
--- a/pics/crystalsvg/cr32-app-package_edutainment.png
+++ b/pics/crystalsvg/cr32-app-package_edutainment.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_favourite.png b/pics/crystalsvg/cr32-app-package_favourite.png
index 6e6b784ec..b8f6ad391 100644
--- a/pics/crystalsvg/cr32-app-package_favourite.png
+++ b/pics/crystalsvg/cr32-app-package_favourite.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_games_arcade.png b/pics/crystalsvg/cr32-app-package_games_arcade.png
index 93f56aa97..25fa7b9e0 100644
--- a/pics/crystalsvg/cr32-app-package_games_arcade.png
+++ b/pics/crystalsvg/cr32-app-package_games_arcade.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_games_board.png b/pics/crystalsvg/cr32-app-package_games_board.png
index a3152cfca..6edf25e66 100644
--- a/pics/crystalsvg/cr32-app-package_games_board.png
+++ b/pics/crystalsvg/cr32-app-package_games_board.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_games_card.png b/pics/crystalsvg/cr32-app-package_games_card.png
index bae6de614..850d84e46 100644
--- a/pics/crystalsvg/cr32-app-package_games_card.png
+++ b/pics/crystalsvg/cr32-app-package_games_card.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_games_kids.png b/pics/crystalsvg/cr32-app-package_games_kids.png
index 50ba88eb8..e3beb1081 100644
--- a/pics/crystalsvg/cr32-app-package_games_kids.png
+++ b/pics/crystalsvg/cr32-app-package_games_kids.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_games_strategy.png b/pics/crystalsvg/cr32-app-package_games_strategy.png
index 18b2ded15..3091c69d5 100644
--- a/pics/crystalsvg/cr32-app-package_games_strategy.png
+++ b/pics/crystalsvg/cr32-app-package_games_strategy.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_settings.png b/pics/crystalsvg/cr32-app-package_settings.png
index ddaaeb081..b33849823 100644
--- a/pics/crystalsvg/cr32-app-package_settings.png
+++ b/pics/crystalsvg/cr32-app-package_settings.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_system.png b/pics/crystalsvg/cr32-app-package_system.png
index 726784a4d..80c7fced5 100644
--- a/pics/crystalsvg/cr32-app-package_system.png
+++ b/pics/crystalsvg/cr32-app-package_system.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-package_toys.png b/pics/crystalsvg/cr32-app-package_toys.png
index 88df4ab8a..e8c6a5217 100644
--- a/pics/crystalsvg/cr32-app-package_toys.png
+++ b/pics/crystalsvg/cr32-app-package_toys.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-pan.png b/pics/crystalsvg/cr32-app-pan.png
index 231e7d294..d577cb549 100644
--- a/pics/crystalsvg/cr32-app-pan.png
+++ b/pics/crystalsvg/cr32-app-pan.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-penguin.png b/pics/crystalsvg/cr32-app-penguin.png
index 3d7aa5245..5a971e389 100644
--- a/pics/crystalsvg/cr32-app-penguin.png
+++ b/pics/crystalsvg/cr32-app-penguin.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-phppg.png b/pics/crystalsvg/cr32-app-phppg.png
index a0e4f474f..568f4d0dc 100644
--- a/pics/crystalsvg/cr32-app-phppg.png
+++ b/pics/crystalsvg/cr32-app-phppg.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-pinguin.png b/pics/crystalsvg/cr32-app-pinguin.png
index dd6c4d19c..25f6bfb1c 100644
--- a/pics/crystalsvg/cr32-app-pinguin.png
+++ b/pics/crystalsvg/cr32-app-pinguin.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-plan.png b/pics/crystalsvg/cr32-app-plan.png
index b8d8cbeae..feb2d271d 100644
--- a/pics/crystalsvg/cr32-app-plan.png
+++ b/pics/crystalsvg/cr32-app-plan.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-planner.png b/pics/crystalsvg/cr32-app-planner.png
index 33155b4b7..89c4d0408 100644
--- a/pics/crystalsvg/cr32-app-planner.png
+++ b/pics/crystalsvg/cr32-app-planner.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-pybliographic.png b/pics/crystalsvg/cr32-app-pybliographic.png
index 7ab4566ea..5b92d9d00 100644
--- a/pics/crystalsvg/cr32-app-pybliographic.png
+++ b/pics/crystalsvg/cr32-app-pybliographic.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-pysol.png b/pics/crystalsvg/cr32-app-pysol.png
index a3da14021..2e2ab6f02 100644
--- a/pics/crystalsvg/cr32-app-pysol.png
+++ b/pics/crystalsvg/cr32-app-pysol.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-randr.png b/pics/crystalsvg/cr32-app-randr.png
index a0646b5c1..26c0248a5 100644
--- a/pics/crystalsvg/cr32-app-randr.png
+++ b/pics/crystalsvg/cr32-app-randr.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-realplayer.png b/pics/crystalsvg/cr32-app-realplayer.png
index 73ce6512d..0048e03a2 100644
--- a/pics/crystalsvg/cr32-app-realplayer.png
+++ b/pics/crystalsvg/cr32-app-realplayer.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-runprocesscatcher.png b/pics/crystalsvg/cr32-app-runprocesscatcher.png
index 101162f1b..9e47d36b0 100644
--- a/pics/crystalsvg/cr32-app-runprocesscatcher.png
+++ b/pics/crystalsvg/cr32-app-runprocesscatcher.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-scribus.png b/pics/crystalsvg/cr32-app-scribus.png
index 03d32ec99..d818cdfa6 100644
--- a/pics/crystalsvg/cr32-app-scribus.png
+++ b/pics/crystalsvg/cr32-app-scribus.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-sodipodi.png b/pics/crystalsvg/cr32-app-sodipodi.png
index 70cc41646..ac1d01320 100644
--- a/pics/crystalsvg/cr32-app-sodipodi.png
+++ b/pics/crystalsvg/cr32-app-sodipodi.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-systemtray.png b/pics/crystalsvg/cr32-app-systemtray.png
index 61eabf335..1c4ecc059 100644
--- a/pics/crystalsvg/cr32-app-systemtray.png
+++ b/pics/crystalsvg/cr32-app-systemtray.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-taskbar.png b/pics/crystalsvg/cr32-app-taskbar.png
index a0d02f568..a8f9e9f3d 100644
--- a/pics/crystalsvg/cr32-app-taskbar.png
+++ b/pics/crystalsvg/cr32-app-taskbar.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-terminal.png b/pics/crystalsvg/cr32-app-terminal.png
index 50f7c0ed2..e59d06f61 100644
--- a/pics/crystalsvg/cr32-app-terminal.png
+++ b/pics/crystalsvg/cr32-app-terminal.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-tux.png b/pics/crystalsvg/cr32-app-tux.png
index c0c562ed8..dfccb05b3 100644
--- a/pics/crystalsvg/cr32-app-tux.png
+++ b/pics/crystalsvg/cr32-app-tux.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-vnc.png b/pics/crystalsvg/cr32-app-vnc.png
index 11640324d..a735aedfd 100644
--- a/pics/crystalsvg/cr32-app-vnc.png
+++ b/pics/crystalsvg/cr32-app-vnc.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-wabi.png b/pics/crystalsvg/cr32-app-wabi.png
index a861ede1d..87de93263 100644
--- a/pics/crystalsvg/cr32-app-wabi.png
+++ b/pics/crystalsvg/cr32-app-wabi.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-wine.png b/pics/crystalsvg/cr32-app-wine.png
index 2eb7eed55..1bf146eed 100644
--- a/pics/crystalsvg/cr32-app-wine.png
+++ b/pics/crystalsvg/cr32-app-wine.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-wp.png b/pics/crystalsvg/cr32-app-wp.png
index 89cd2c74c..5d21d8390 100644
--- a/pics/crystalsvg/cr32-app-wp.png
+++ b/pics/crystalsvg/cr32-app-wp.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-x.png b/pics/crystalsvg/cr32-app-x.png
index 8f83edf83..755937213 100644
--- a/pics/crystalsvg/cr32-app-x.png
+++ b/pics/crystalsvg/cr32-app-x.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xapp.png b/pics/crystalsvg/cr32-app-xapp.png
index 7643ef37b..7c78869b6 100644
--- a/pics/crystalsvg/cr32-app-xapp.png
+++ b/pics/crystalsvg/cr32-app-xapp.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xawtv.png b/pics/crystalsvg/cr32-app-xawtv.png
index a4b2cab5d..a91d7fc89 100644
--- a/pics/crystalsvg/cr32-app-xawtv.png
+++ b/pics/crystalsvg/cr32-app-xawtv.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xcalc.png b/pics/crystalsvg/cr32-app-xcalc.png
index 0ee78d29a..420e7349b 100644
--- a/pics/crystalsvg/cr32-app-xcalc.png
+++ b/pics/crystalsvg/cr32-app-xcalc.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xchat.png b/pics/crystalsvg/cr32-app-xchat.png
index 42dd6e0ee..5ed2b1abb 100644
--- a/pics/crystalsvg/cr32-app-xchat.png
+++ b/pics/crystalsvg/cr32-app-xchat.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xclipboard.png b/pics/crystalsvg/cr32-app-xclipboard.png
index 4b770546e..5ec8a96f0 100644
--- a/pics/crystalsvg/cr32-app-xclipboard.png
+++ b/pics/crystalsvg/cr32-app-xclipboard.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xclock.png b/pics/crystalsvg/cr32-app-xclock.png
index 68ed9d4d2..f42138762 100644
--- a/pics/crystalsvg/cr32-app-xclock.png
+++ b/pics/crystalsvg/cr32-app-xclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xconsole.png b/pics/crystalsvg/cr32-app-xconsole.png
index 50f7c0ed2..e59d06f61 100644
--- a/pics/crystalsvg/cr32-app-xconsole.png
+++ b/pics/crystalsvg/cr32-app-xconsole.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xedit.png b/pics/crystalsvg/cr32-app-xedit.png
index f3f6419be..e05ad2e10 100644
--- a/pics/crystalsvg/cr32-app-xedit.png
+++ b/pics/crystalsvg/cr32-app-xedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xemacs.png b/pics/crystalsvg/cr32-app-xemacs.png
index 5d4708d42..e9d674ef0 100644
--- a/pics/crystalsvg/cr32-app-xemacs.png
+++ b/pics/crystalsvg/cr32-app-xemacs.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xeyes.png b/pics/crystalsvg/cr32-app-xeyes.png
index 1f306f721..a6db30d53 100644
--- a/pics/crystalsvg/cr32-app-xeyes.png
+++ b/pics/crystalsvg/cr32-app-xeyes.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xfig.png b/pics/crystalsvg/cr32-app-xfig.png
index 751591d64..147a4b658 100644
--- a/pics/crystalsvg/cr32-app-xfig.png
+++ b/pics/crystalsvg/cr32-app-xfig.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xfmail.png b/pics/crystalsvg/cr32-app-xfmail.png
index 0ddf0cf5a..360e0d5c4 100644
--- a/pics/crystalsvg/cr32-app-xfmail.png
+++ b/pics/crystalsvg/cr32-app-xfmail.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xload.png b/pics/crystalsvg/cr32-app-xload.png
index f28fad9cf..a988c417b 100644
--- a/pics/crystalsvg/cr32-app-xload.png
+++ b/pics/crystalsvg/cr32-app-xload.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xmag.png b/pics/crystalsvg/cr32-app-xmag.png
index af1e0651a..0d7d34d22 100644
--- a/pics/crystalsvg/cr32-app-xmag.png
+++ b/pics/crystalsvg/cr32-app-xmag.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xmms.png b/pics/crystalsvg/cr32-app-xmms.png
index 1fe75e327..8d07140dd 100644
--- a/pics/crystalsvg/cr32-app-xmms.png
+++ b/pics/crystalsvg/cr32-app-xmms.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xosview.png b/pics/crystalsvg/cr32-app-xosview.png
index 699ce2bd8..8e4c23e59 100644
--- a/pics/crystalsvg/cr32-app-xosview.png
+++ b/pics/crystalsvg/cr32-app-xosview.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xpaint.png b/pics/crystalsvg/cr32-app-xpaint.png
index a1224e02f..e1941f1e1 100644
--- a/pics/crystalsvg/cr32-app-xpaint.png
+++ b/pics/crystalsvg/cr32-app-xpaint.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-app-xv.png b/pics/crystalsvg/cr32-app-xv.png
index 90d923fb1..adf45527e 100644
--- a/pics/crystalsvg/cr32-app-xv.png
+++ b/pics/crystalsvg/cr32-app-xv.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-category-applications-development.png b/pics/crystalsvg/cr32-category-applications-development.png
index 0125d5b0b..d5a690760 100644
--- a/pics/crystalsvg/cr32-category-applications-development.png
+++ b/pics/crystalsvg/cr32-category-applications-development.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-category-applications-games.png b/pics/crystalsvg/cr32-category-applications-games.png
index 2bb69e733..583a94370 100644
--- a/pics/crystalsvg/cr32-category-applications-games.png
+++ b/pics/crystalsvg/cr32-category-applications-games.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-category-applications-graphics.png b/pics/crystalsvg/cr32-category-applications-graphics.png
index 62dae0dcc..9c85c679b 100644
--- a/pics/crystalsvg/cr32-category-applications-graphics.png
+++ b/pics/crystalsvg/cr32-category-applications-graphics.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-category-applications-internet.png b/pics/crystalsvg/cr32-category-applications-internet.png
index e6f894d9f..b0913cb1e 100644
--- a/pics/crystalsvg/cr32-category-applications-internet.png
+++ b/pics/crystalsvg/cr32-category-applications-internet.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-category-applications-multimedia.png b/pics/crystalsvg/cr32-category-applications-multimedia.png
index ffcb28ea1..9f2c02456 100644
--- a/pics/crystalsvg/cr32-category-applications-multimedia.png
+++ b/pics/crystalsvg/cr32-category-applications-multimedia.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-category-applications-office.png b/pics/crystalsvg/cr32-category-applications-office.png
index 7ba994729..837485218 100644
--- a/pics/crystalsvg/cr32-category-applications-office.png
+++ b/pics/crystalsvg/cr32-category-applications-office.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-category-applications-science.png b/pics/crystalsvg/cr32-category-applications-science.png
index 09e4c5841..e2b6e332e 100644
--- a/pics/crystalsvg/cr32-category-applications-science.png
+++ b/pics/crystalsvg/cr32-category-applications-science.png
Binary files differ
diff --git a/pics/crystalsvg/cr32-category-applications-utilities.png b/pics/crystalsvg/cr32-category-applications-utilities.png
index 63b511a27..1d42cf4f9 100644
--- a/pics/crystalsvg/cr32-category-applications-utilities.png
+++ b/pics/crystalsvg/cr32-category-applications-utilities.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-abiword.png b/pics/crystalsvg/cr48-app-abiword.png
index e37b0b927..b04e8768f 100644
--- a/pics/crystalsvg/cr48-app-abiword.png
+++ b/pics/crystalsvg/cr48-app-abiword.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-acroread.png b/pics/crystalsvg/cr48-app-acroread.png
index a16a821b3..8388d26f8 100644
--- a/pics/crystalsvg/cr48-app-acroread.png
+++ b/pics/crystalsvg/cr48-app-acroread.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-applixware.png b/pics/crystalsvg/cr48-app-applixware.png
index 6f29629e8..6fd5869fa 100644
--- a/pics/crystalsvg/cr48-app-applixware.png
+++ b/pics/crystalsvg/cr48-app-applixware.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-blender.png b/pics/crystalsvg/cr48-app-blender.png
index 19b70349f..6cbc8d0ee 100644
--- a/pics/crystalsvg/cr48-app-blender.png
+++ b/pics/crystalsvg/cr48-app-blender.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-bluefish.png b/pics/crystalsvg/cr48-app-bluefish.png
index 7f534e9ce..a196cfdf7 100644
--- a/pics/crystalsvg/cr48-app-bluefish.png
+++ b/pics/crystalsvg/cr48-app-bluefish.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-clanbomber.png b/pics/crystalsvg/cr48-app-clanbomber.png
index c7060f5e6..06b046349 100644
--- a/pics/crystalsvg/cr48-app-clanbomber.png
+++ b/pics/crystalsvg/cr48-app-clanbomber.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-designer.png b/pics/crystalsvg/cr48-app-designer.png
index 774f7e121..c9efd845d 100644
--- a/pics/crystalsvg/cr48-app-designer.png
+++ b/pics/crystalsvg/cr48-app-designer.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-dia.png b/pics/crystalsvg/cr48-app-dia.png
index b8b624949..937acc3f3 100644
--- a/pics/crystalsvg/cr48-app-dia.png
+++ b/pics/crystalsvg/cr48-app-dia.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-eclipse.png b/pics/crystalsvg/cr48-app-eclipse.png
index 87b58d251..00dcfe973 100644
--- a/pics/crystalsvg/cr48-app-eclipse.png
+++ b/pics/crystalsvg/cr48-app-eclipse.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-edu_languages.png b/pics/crystalsvg/cr48-app-edu_languages.png
index 886904e1d..fc0648991 100644
--- a/pics/crystalsvg/cr48-app-edu_languages.png
+++ b/pics/crystalsvg/cr48-app-edu_languages.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-edu_mathematics.png b/pics/crystalsvg/cr48-app-edu_mathematics.png
index 8f36248f5..dee01cdd8 100644
--- a/pics/crystalsvg/cr48-app-edu_mathematics.png
+++ b/pics/crystalsvg/cr48-app-edu_mathematics.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-edu_miscellaneous.png b/pics/crystalsvg/cr48-app-edu_miscellaneous.png
index 30f3a754e..ff3b8243b 100644
--- a/pics/crystalsvg/cr48-app-edu_miscellaneous.png
+++ b/pics/crystalsvg/cr48-app-edu_miscellaneous.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-emacs.png b/pics/crystalsvg/cr48-app-emacs.png
index 88380f2b5..9dec00aeb 100644
--- a/pics/crystalsvg/cr48-app-emacs.png
+++ b/pics/crystalsvg/cr48-app-emacs.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-email.png b/pics/crystalsvg/cr48-app-email.png
index d53e62064..f243cc9b6 100644
--- a/pics/crystalsvg/cr48-app-email.png
+++ b/pics/crystalsvg/cr48-app-email.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-evolution.png b/pics/crystalsvg/cr48-app-evolution.png
index 412dcfbbc..475cd32d0 100644
--- a/pics/crystalsvg/cr48-app-evolution.png
+++ b/pics/crystalsvg/cr48-app-evolution.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-fifteenpieces.png b/pics/crystalsvg/cr48-app-fifteenpieces.png
index 2432935db..812d7b955 100644
--- a/pics/crystalsvg/cr48-app-fifteenpieces.png
+++ b/pics/crystalsvg/cr48-app-fifteenpieces.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-gabber.png b/pics/crystalsvg/cr48-app-gabber.png
index 4b5b87086..85a14d04e 100644
--- a/pics/crystalsvg/cr48-app-gabber.png
+++ b/pics/crystalsvg/cr48-app-gabber.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-gaim.png b/pics/crystalsvg/cr48-app-gaim.png
index b44b969f0..45e2a5688 100644
--- a/pics/crystalsvg/cr48-app-gaim.png
+++ b/pics/crystalsvg/cr48-app-gaim.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-galeon.png b/pics/crystalsvg/cr48-app-galeon.png
index b2cd02657..de45fe2d5 100644
--- a/pics/crystalsvg/cr48-app-galeon.png
+++ b/pics/crystalsvg/cr48-app-galeon.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-gimp.png b/pics/crystalsvg/cr48-app-gimp.png
index 830fa4a61..2cde2fd14 100644
--- a/pics/crystalsvg/cr48-app-gimp.png
+++ b/pics/crystalsvg/cr48-app-gimp.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-gnome_apps.png b/pics/crystalsvg/cr48-app-gnome_apps.png
index 3f717d0b5..47ceee203 100644
--- a/pics/crystalsvg/cr48-app-gnome_apps.png
+++ b/pics/crystalsvg/cr48-app-gnome_apps.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-gnomemeeting.png b/pics/crystalsvg/cr48-app-gnomemeeting.png
index 2957a330e..737882989 100644
--- a/pics/crystalsvg/cr48-app-gnomemeeting.png
+++ b/pics/crystalsvg/cr48-app-gnomemeeting.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-gnucash.png b/pics/crystalsvg/cr48-app-gnucash.png
index 1febf3206..073519503 100644
--- a/pics/crystalsvg/cr48-app-gnucash.png
+++ b/pics/crystalsvg/cr48-app-gnucash.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-gnumeric.png b/pics/crystalsvg/cr48-app-gnumeric.png
index 695c71e8b..03b20838c 100644
--- a/pics/crystalsvg/cr48-app-gnumeric.png
+++ b/pics/crystalsvg/cr48-app-gnumeric.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-gvim.png b/pics/crystalsvg/cr48-app-gvim.png
index 718766453..603da32e3 100644
--- a/pics/crystalsvg/cr48-app-gvim.png
+++ b/pics/crystalsvg/cr48-app-gvim.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-kbinaryclock.png b/pics/crystalsvg/cr48-app-kbinaryclock.png
index d54204545..5c31ab2bb 100644
--- a/pics/crystalsvg/cr48-app-kbinaryclock.png
+++ b/pics/crystalsvg/cr48-app-kbinaryclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-kfm_home.png b/pics/crystalsvg/cr48-app-kfm_home.png
index d08e6ab00..2a47d5459 100644
--- a/pics/crystalsvg/cr48-app-kfm_home.png
+++ b/pics/crystalsvg/cr48-app-kfm_home.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-kvirc.png b/pics/crystalsvg/cr48-app-kvirc.png
index 7823680f1..aea724b31 100644
--- a/pics/crystalsvg/cr48-app-kvirc.png
+++ b/pics/crystalsvg/cr48-app-kvirc.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-licq.png b/pics/crystalsvg/cr48-app-licq.png
index cdd4ab745..83b6d79cd 100644
--- a/pics/crystalsvg/cr48-app-licq.png
+++ b/pics/crystalsvg/cr48-app-licq.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-linuxconf.png b/pics/crystalsvg/cr48-app-linuxconf.png
index 35c34e178..881279340 100644
--- a/pics/crystalsvg/cr48-app-linuxconf.png
+++ b/pics/crystalsvg/cr48-app-linuxconf.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-nedit.png b/pics/crystalsvg/cr48-app-nedit.png
index a61754194..dd6818663 100644
--- a/pics/crystalsvg/cr48-app-nedit.png
+++ b/pics/crystalsvg/cr48-app-nedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-netscape.png b/pics/crystalsvg/cr48-app-netscape.png
index e9f56b659..59c9912fb 100644
--- a/pics/crystalsvg/cr48-app-netscape.png
+++ b/pics/crystalsvg/cr48-app-netscape.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-opera.png b/pics/crystalsvg/cr48-app-opera.png
index f092f4ec2..2f4f59fdb 100644
--- a/pics/crystalsvg/cr48-app-opera.png
+++ b/pics/crystalsvg/cr48-app-opera.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package.png b/pics/crystalsvg/cr48-app-package.png
index db59aecca..af9afa743 100644
--- a/pics/crystalsvg/cr48-app-package.png
+++ b/pics/crystalsvg/cr48-app-package.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_applications.png b/pics/crystalsvg/cr48-app-package_applications.png
index 671fc7db7..967f879d2 100644
--- a/pics/crystalsvg/cr48-app-package_applications.png
+++ b/pics/crystalsvg/cr48-app-package_applications.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_editors.png b/pics/crystalsvg/cr48-app-package_editors.png
index 298655555..99f40b440 100644
--- a/pics/crystalsvg/cr48-app-package_editors.png
+++ b/pics/crystalsvg/cr48-app-package_editors.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_edutainment.png b/pics/crystalsvg/cr48-app-package_edutainment.png
index 30f3a754e..ff3b8243b 100644
--- a/pics/crystalsvg/cr48-app-package_edutainment.png
+++ b/pics/crystalsvg/cr48-app-package_edutainment.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_favourite.png b/pics/crystalsvg/cr48-app-package_favourite.png
index 979680cf0..a72be661b 100644
--- a/pics/crystalsvg/cr48-app-package_favourite.png
+++ b/pics/crystalsvg/cr48-app-package_favourite.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_games_arcade.png b/pics/crystalsvg/cr48-app-package_games_arcade.png
index 882c2b827..483cd9ba0 100644
--- a/pics/crystalsvg/cr48-app-package_games_arcade.png
+++ b/pics/crystalsvg/cr48-app-package_games_arcade.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_games_board.png b/pics/crystalsvg/cr48-app-package_games_board.png
index 06967b0da..400f8a7de 100644
--- a/pics/crystalsvg/cr48-app-package_games_board.png
+++ b/pics/crystalsvg/cr48-app-package_games_board.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_games_card.png b/pics/crystalsvg/cr48-app-package_games_card.png
index 13b98c99c..34b695839 100644
--- a/pics/crystalsvg/cr48-app-package_games_card.png
+++ b/pics/crystalsvg/cr48-app-package_games_card.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_games_kids.png b/pics/crystalsvg/cr48-app-package_games_kids.png
index 93dafddf8..d70dd4f72 100644
--- a/pics/crystalsvg/cr48-app-package_games_kids.png
+++ b/pics/crystalsvg/cr48-app-package_games_kids.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_games_strategy.png b/pics/crystalsvg/cr48-app-package_games_strategy.png
index 146543f81..f8bb1c5a0 100644
--- a/pics/crystalsvg/cr48-app-package_games_strategy.png
+++ b/pics/crystalsvg/cr48-app-package_games_strategy.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_settings.png b/pics/crystalsvg/cr48-app-package_settings.png
index 8b171e0bd..79a1e7ad0 100644
--- a/pics/crystalsvg/cr48-app-package_settings.png
+++ b/pics/crystalsvg/cr48-app-package_settings.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_system.png b/pics/crystalsvg/cr48-app-package_system.png
index 3ed096d9d..dac0b12da 100644
--- a/pics/crystalsvg/cr48-app-package_system.png
+++ b/pics/crystalsvg/cr48-app-package_system.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-package_toys.png b/pics/crystalsvg/cr48-app-package_toys.png
index b8e20c4ac..b1260d2d1 100644
--- a/pics/crystalsvg/cr48-app-package_toys.png
+++ b/pics/crystalsvg/cr48-app-package_toys.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-pan.png b/pics/crystalsvg/cr48-app-pan.png
index b7cc52ae4..f8336c082 100644
--- a/pics/crystalsvg/cr48-app-pan.png
+++ b/pics/crystalsvg/cr48-app-pan.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-penguin.png b/pics/crystalsvg/cr48-app-penguin.png
index e8d33ab4e..4b39f47d6 100644
--- a/pics/crystalsvg/cr48-app-penguin.png
+++ b/pics/crystalsvg/cr48-app-penguin.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-phppg.png b/pics/crystalsvg/cr48-app-phppg.png
index 5655253d8..ec551fc82 100644
--- a/pics/crystalsvg/cr48-app-phppg.png
+++ b/pics/crystalsvg/cr48-app-phppg.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-planner.png b/pics/crystalsvg/cr48-app-planner.png
index b915c1023..509e7a380 100644
--- a/pics/crystalsvg/cr48-app-planner.png
+++ b/pics/crystalsvg/cr48-app-planner.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-pysol.png b/pics/crystalsvg/cr48-app-pysol.png
index d73085179..e029448f5 100644
--- a/pics/crystalsvg/cr48-app-pysol.png
+++ b/pics/crystalsvg/cr48-app-pysol.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-randr.png b/pics/crystalsvg/cr48-app-randr.png
index c8959019d..85e2fcd6b 100644
--- a/pics/crystalsvg/cr48-app-randr.png
+++ b/pics/crystalsvg/cr48-app-randr.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-remote.png b/pics/crystalsvg/cr48-app-remote.png
index b4cf93a09..9c6e13355 100644
--- a/pics/crystalsvg/cr48-app-remote.png
+++ b/pics/crystalsvg/cr48-app-remote.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-scribus.png b/pics/crystalsvg/cr48-app-scribus.png
index 571c4205f..534e54098 100644
--- a/pics/crystalsvg/cr48-app-scribus.png
+++ b/pics/crystalsvg/cr48-app-scribus.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-sodipodi.png b/pics/crystalsvg/cr48-app-sodipodi.png
index 90a339869..624810048 100644
--- a/pics/crystalsvg/cr48-app-sodipodi.png
+++ b/pics/crystalsvg/cr48-app-sodipodi.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-staroffice.png b/pics/crystalsvg/cr48-app-staroffice.png
index bfd33b17e..6070f9b6f 100644
--- a/pics/crystalsvg/cr48-app-staroffice.png
+++ b/pics/crystalsvg/cr48-app-staroffice.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-systemtray.png b/pics/crystalsvg/cr48-app-systemtray.png
index 768f9748c..855fc947a 100644
--- a/pics/crystalsvg/cr48-app-systemtray.png
+++ b/pics/crystalsvg/cr48-app-systemtray.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-taskbar.png b/pics/crystalsvg/cr48-app-taskbar.png
index e9b51c898..49fa84f93 100644
--- a/pics/crystalsvg/cr48-app-taskbar.png
+++ b/pics/crystalsvg/cr48-app-taskbar.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-terminal.png b/pics/crystalsvg/cr48-app-terminal.png
index de458c184..87e977ed6 100644
--- a/pics/crystalsvg/cr48-app-terminal.png
+++ b/pics/crystalsvg/cr48-app-terminal.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-tux.png b/pics/crystalsvg/cr48-app-tux.png
index d75f61b08..99f5bd37f 100644
--- a/pics/crystalsvg/cr48-app-tux.png
+++ b/pics/crystalsvg/cr48-app-tux.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-vnc.png b/pics/crystalsvg/cr48-app-vnc.png
index 67dc984bb..b75b62d0e 100644
--- a/pics/crystalsvg/cr48-app-vnc.png
+++ b/pics/crystalsvg/cr48-app-vnc.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-wine.png b/pics/crystalsvg/cr48-app-wine.png
index 15c417a9c..fbfc75e03 100644
--- a/pics/crystalsvg/cr48-app-wine.png
+++ b/pics/crystalsvg/cr48-app-wine.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-wmaker_apps.png b/pics/crystalsvg/cr48-app-wmaker_apps.png
index 8fe962c4b..4e9a7fa07 100644
--- a/pics/crystalsvg/cr48-app-wmaker_apps.png
+++ b/pics/crystalsvg/cr48-app-wmaker_apps.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-wp.png b/pics/crystalsvg/cr48-app-wp.png
index a2fa50794..603358c32 100644
--- a/pics/crystalsvg/cr48-app-wp.png
+++ b/pics/crystalsvg/cr48-app-wp.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-xchat.png b/pics/crystalsvg/cr48-app-xchat.png
index 814c899d1..413e0b4c8 100644
--- a/pics/crystalsvg/cr48-app-xchat.png
+++ b/pics/crystalsvg/cr48-app-xchat.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-xclock.png b/pics/crystalsvg/cr48-app-xclock.png
index 141f5b5c3..56f0cb9bd 100644
--- a/pics/crystalsvg/cr48-app-xclock.png
+++ b/pics/crystalsvg/cr48-app-xclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-xedit.png b/pics/crystalsvg/cr48-app-xedit.png
index c0fae6403..c3b373dc1 100644
--- a/pics/crystalsvg/cr48-app-xedit.png
+++ b/pics/crystalsvg/cr48-app-xedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-xemacs.png b/pics/crystalsvg/cr48-app-xemacs.png
index 8ebd21083..5bf1a0c69 100644
--- a/pics/crystalsvg/cr48-app-xemacs.png
+++ b/pics/crystalsvg/cr48-app-xemacs.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-xfmail.png b/pics/crystalsvg/cr48-app-xfmail.png
index 20fc52bd9..5f9c874a3 100644
--- a/pics/crystalsvg/cr48-app-xfmail.png
+++ b/pics/crystalsvg/cr48-app-xfmail.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-xmag.png b/pics/crystalsvg/cr48-app-xmag.png
index 190964357..72376f481 100644
--- a/pics/crystalsvg/cr48-app-xmag.png
+++ b/pics/crystalsvg/cr48-app-xmag.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-app-xv.png b/pics/crystalsvg/cr48-app-xv.png
index 2c5dd69db..96aebac37 100644
--- a/pics/crystalsvg/cr48-app-xv.png
+++ b/pics/crystalsvg/cr48-app-xv.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-category-applications-development.png b/pics/crystalsvg/cr48-category-applications-development.png
index 72e285607..eb17dd8ef 100644
--- a/pics/crystalsvg/cr48-category-applications-development.png
+++ b/pics/crystalsvg/cr48-category-applications-development.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-category-applications-games.png b/pics/crystalsvg/cr48-category-applications-games.png
index 9565ce1ff..0fcf82cbe 100644
--- a/pics/crystalsvg/cr48-category-applications-games.png
+++ b/pics/crystalsvg/cr48-category-applications-games.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-category-applications-graphics.png b/pics/crystalsvg/cr48-category-applications-graphics.png
index ae0ef0274..5e80fd0d8 100644
--- a/pics/crystalsvg/cr48-category-applications-graphics.png
+++ b/pics/crystalsvg/cr48-category-applications-graphics.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-category-applications-internet.png b/pics/crystalsvg/cr48-category-applications-internet.png
index 47b78a93c..060edb451 100644
--- a/pics/crystalsvg/cr48-category-applications-internet.png
+++ b/pics/crystalsvg/cr48-category-applications-internet.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-category-applications-multimedia.png b/pics/crystalsvg/cr48-category-applications-multimedia.png
index 97edf2f95..0aca4f6f9 100644
--- a/pics/crystalsvg/cr48-category-applications-multimedia.png
+++ b/pics/crystalsvg/cr48-category-applications-multimedia.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-category-applications-office.png b/pics/crystalsvg/cr48-category-applications-office.png
index 774fcae09..b4d453489 100644
--- a/pics/crystalsvg/cr48-category-applications-office.png
+++ b/pics/crystalsvg/cr48-category-applications-office.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-category-applications-science.png b/pics/crystalsvg/cr48-category-applications-science.png
index 05186662e..ce94273f4 100644
--- a/pics/crystalsvg/cr48-category-applications-science.png
+++ b/pics/crystalsvg/cr48-category-applications-science.png
Binary files differ
diff --git a/pics/crystalsvg/cr48-category-applications-utilities.png b/pics/crystalsvg/cr48-category-applications-utilities.png
index 4858a848d..8e96ae843 100644
--- a/pics/crystalsvg/cr48-category-applications-utilities.png
+++ b/pics/crystalsvg/cr48-category-applications-utilities.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-acroread.png b/pics/crystalsvg/cr64-app-acroread.png
index 715af866d..b240a2b3c 100644
--- a/pics/crystalsvg/cr64-app-acroread.png
+++ b/pics/crystalsvg/cr64-app-acroread.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-applixware.png b/pics/crystalsvg/cr64-app-applixware.png
index 544270362..b74c61e50 100644
--- a/pics/crystalsvg/cr64-app-applixware.png
+++ b/pics/crystalsvg/cr64-app-applixware.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-clanbomber.png b/pics/crystalsvg/cr64-app-clanbomber.png
index 61200b981..554c0176a 100644
--- a/pics/crystalsvg/cr64-app-clanbomber.png
+++ b/pics/crystalsvg/cr64-app-clanbomber.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-email.png b/pics/crystalsvg/cr64-app-email.png
index 1b53d186f..ddc269450 100644
--- a/pics/crystalsvg/cr64-app-email.png
+++ b/pics/crystalsvg/cr64-app-email.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-gimp.png b/pics/crystalsvg/cr64-app-gimp.png
index 4741b9b91..f98303ac9 100644
--- a/pics/crystalsvg/cr64-app-gimp.png
+++ b/pics/crystalsvg/cr64-app-gimp.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-gvim.png b/pics/crystalsvg/cr64-app-gvim.png
index 2bdc8bd8c..34d3f2cab 100644
--- a/pics/crystalsvg/cr64-app-gvim.png
+++ b/pics/crystalsvg/cr64-app-gvim.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-kfm_home.png b/pics/crystalsvg/cr64-app-kfm_home.png
index acf3e4aa8..73f7ef8d2 100644
--- a/pics/crystalsvg/cr64-app-kfm_home.png
+++ b/pics/crystalsvg/cr64-app-kfm_home.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-kvirc.png b/pics/crystalsvg/cr64-app-kvirc.png
index bde777ebd..342dfcaed 100644
--- a/pics/crystalsvg/cr64-app-kvirc.png
+++ b/pics/crystalsvg/cr64-app-kvirc.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-licq.png b/pics/crystalsvg/cr64-app-licq.png
index 8d45af839..95f8912e3 100644
--- a/pics/crystalsvg/cr64-app-licq.png
+++ b/pics/crystalsvg/cr64-app-licq.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-linuxconf.png b/pics/crystalsvg/cr64-app-linuxconf.png
index 71c357560..d3938ba42 100644
--- a/pics/crystalsvg/cr64-app-linuxconf.png
+++ b/pics/crystalsvg/cr64-app-linuxconf.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-nedit.png b/pics/crystalsvg/cr64-app-nedit.png
index aa3bd6063..755e8d2f2 100644
--- a/pics/crystalsvg/cr64-app-nedit.png
+++ b/pics/crystalsvg/cr64-app-nedit.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-netscape.png b/pics/crystalsvg/cr64-app-netscape.png
index 42df68676..c31baf25e 100644
--- a/pics/crystalsvg/cr64-app-netscape.png
+++ b/pics/crystalsvg/cr64-app-netscape.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-package.png b/pics/crystalsvg/cr64-app-package.png
index d43ebbd05..e1d1391f0 100644
--- a/pics/crystalsvg/cr64-app-package.png
+++ b/pics/crystalsvg/cr64-app-package.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-package_applications.png b/pics/crystalsvg/cr64-app-package_applications.png
index d85a736c7..9caf9c1b1 100644
--- a/pics/crystalsvg/cr64-app-package_applications.png
+++ b/pics/crystalsvg/cr64-app-package_applications.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-package_favourite.png b/pics/crystalsvg/cr64-app-package_favourite.png
index 989e1270b..d4ee0be89 100644
--- a/pics/crystalsvg/cr64-app-package_favourite.png
+++ b/pics/crystalsvg/cr64-app-package_favourite.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-package_settings.png b/pics/crystalsvg/cr64-app-package_settings.png
index 02bca4fb4..4db75e447 100644
--- a/pics/crystalsvg/cr64-app-package_settings.png
+++ b/pics/crystalsvg/cr64-app-package_settings.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-package_toys.png b/pics/crystalsvg/cr64-app-package_toys.png
index 368eb4cd7..3c7f1296b 100644
--- a/pics/crystalsvg/cr64-app-package_toys.png
+++ b/pics/crystalsvg/cr64-app-package_toys.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-penguin.png b/pics/crystalsvg/cr64-app-penguin.png
index 1dc2da686..159a89f14 100644
--- a/pics/crystalsvg/cr64-app-penguin.png
+++ b/pics/crystalsvg/cr64-app-penguin.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-phppg.png b/pics/crystalsvg/cr64-app-phppg.png
index d3fa288c2..219f445a0 100644
--- a/pics/crystalsvg/cr64-app-phppg.png
+++ b/pics/crystalsvg/cr64-app-phppg.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-pysol.png b/pics/crystalsvg/cr64-app-pysol.png
index dc0115779..5d3b389a2 100644
--- a/pics/crystalsvg/cr64-app-pysol.png
+++ b/pics/crystalsvg/cr64-app-pysol.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-qtella.png b/pics/crystalsvg/cr64-app-qtella.png
index ad180c2d9..66ef8308e 100644
--- a/pics/crystalsvg/cr64-app-qtella.png
+++ b/pics/crystalsvg/cr64-app-qtella.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-randr.png b/pics/crystalsvg/cr64-app-randr.png
index 5d60f24f6..aba6364d6 100644
--- a/pics/crystalsvg/cr64-app-randr.png
+++ b/pics/crystalsvg/cr64-app-randr.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-staroffice.png b/pics/crystalsvg/cr64-app-staroffice.png
index df2a1017a..a45234ab5 100644
--- a/pics/crystalsvg/cr64-app-staroffice.png
+++ b/pics/crystalsvg/cr64-app-staroffice.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-systemtray.png b/pics/crystalsvg/cr64-app-systemtray.png
index 57e17a576..d7091235c 100644
--- a/pics/crystalsvg/cr64-app-systemtray.png
+++ b/pics/crystalsvg/cr64-app-systemtray.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-taskbar.png b/pics/crystalsvg/cr64-app-taskbar.png
index 4277fdaa4..508281784 100644
--- a/pics/crystalsvg/cr64-app-taskbar.png
+++ b/pics/crystalsvg/cr64-app-taskbar.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-terminal.png b/pics/crystalsvg/cr64-app-terminal.png
index efe6429e2..8df6f4e9f 100644
--- a/pics/crystalsvg/cr64-app-terminal.png
+++ b/pics/crystalsvg/cr64-app-terminal.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-tux.png b/pics/crystalsvg/cr64-app-tux.png
index 99f3465e5..ceb8e2fa5 100644
--- a/pics/crystalsvg/cr64-app-tux.png
+++ b/pics/crystalsvg/cr64-app-tux.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-wp.png b/pics/crystalsvg/cr64-app-wp.png
index 68f030d5b..0948ecce4 100644
--- a/pics/crystalsvg/cr64-app-wp.png
+++ b/pics/crystalsvg/cr64-app-wp.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-xclock.png b/pics/crystalsvg/cr64-app-xclock.png
index 88a044c4d..1356f5c62 100644
--- a/pics/crystalsvg/cr64-app-xclock.png
+++ b/pics/crystalsvg/cr64-app-xclock.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-xfmail.png b/pics/crystalsvg/cr64-app-xfmail.png
index d86a1f8a8..7c59faea2 100644
--- a/pics/crystalsvg/cr64-app-xfmail.png
+++ b/pics/crystalsvg/cr64-app-xfmail.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-app-xmag.png b/pics/crystalsvg/cr64-app-xmag.png
index 5049025b5..766bb5c94 100644
--- a/pics/crystalsvg/cr64-app-xmag.png
+++ b/pics/crystalsvg/cr64-app-xmag.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-category-applications-development.png b/pics/crystalsvg/cr64-category-applications-development.png
index 15e5af5f6..d7d869327 100644
--- a/pics/crystalsvg/cr64-category-applications-development.png
+++ b/pics/crystalsvg/cr64-category-applications-development.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-category-applications-games.png b/pics/crystalsvg/cr64-category-applications-games.png
index e87b2dbae..45a9c1d94 100644
--- a/pics/crystalsvg/cr64-category-applications-games.png
+++ b/pics/crystalsvg/cr64-category-applications-games.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-category-applications-internet.png b/pics/crystalsvg/cr64-category-applications-internet.png
index 3f7323c1b..dda72d60c 100644
--- a/pics/crystalsvg/cr64-category-applications-internet.png
+++ b/pics/crystalsvg/cr64-category-applications-internet.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-category-applications-multimedia.png b/pics/crystalsvg/cr64-category-applications-multimedia.png
index 93f13f7ed..0c3f462ea 100644
--- a/pics/crystalsvg/cr64-category-applications-multimedia.png
+++ b/pics/crystalsvg/cr64-category-applications-multimedia.png
Binary files differ
diff --git a/pics/crystalsvg/cr64-category-applications-utilities.png b/pics/crystalsvg/cr64-category-applications-utilities.png
index 4f5e2736c..add519009 100644
--- a/pics/crystalsvg/cr64-category-applications-utilities.png
+++ b/pics/crystalsvg/cr64-category-applications-utilities.png
Binary files differ
diff --git a/pics/wallpapers/Trinity4.png b/pics/wallpapers/Trinity4.png
index 7c5f4ddf3..00b1397cf 100644
--- a/pics/wallpapers/Trinity4.png
+++ b/pics/wallpapers/Trinity4.png
Binary files differ
diff --git a/pics/wallpapers/andes-venezolanos.png b/pics/wallpapers/andes-venezolanos.png
index 5a8e63a2f..19a626502 100644
--- a/pics/wallpapers/andes-venezolanos.png
+++ b/pics/wallpapers/andes-venezolanos.png
Binary files differ
diff --git a/pics/wallpapers/aurora.png b/pics/wallpapers/aurora.png
index 7cbac8ed3..c245f41e9 100644
--- a/pics/wallpapers/aurora.png
+++ b/pics/wallpapers/aurora.png
Binary files differ
diff --git a/pics/wallpapers/celtic.png b/pics/wallpapers/celtic.png
index 2e210089c..0bf599360 100644
--- a/pics/wallpapers/celtic.png
+++ b/pics/wallpapers/celtic.png
Binary files differ
diff --git a/pics/wallpapers/globe.png b/pics/wallpapers/globe.png
index 8ac321aeb..d9c70cdd8 100644
--- a/pics/wallpapers/globe.png
+++ b/pics/wallpapers/globe.png
Binary files differ
diff --git a/pics/wallpapers/horse-head-nebula.png b/pics/wallpapers/horse-head-nebula.png
index 29f5218d2..afb3ad3aa 100644
--- a/pics/wallpapers/horse-head-nebula.png
+++ b/pics/wallpapers/horse-head-nebula.png
Binary files differ
diff --git a/pics/wallpapers/isadora.png b/pics/wallpapers/isadora.png
index 4b1f883f4..6343885f1 100644
--- a/pics/wallpapers/isadora.png
+++ b/pics/wallpapers/isadora.png
Binary files differ
diff --git a/pics/wallpapers/konqui.png b/pics/wallpapers/konqui.png
index f3d3433be..68bc01cc7 100644
--- a/pics/wallpapers/konqui.png
+++ b/pics/wallpapers/konqui.png
Binary files differ
diff --git a/starttde b/starttde
index 0465f219e..15e776f6a 100755
--- a/starttde
+++ b/starttde
@@ -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
index 930694eab..44298a2c4 100644
--- a/tdeioslave/mac/cr16-app-mac.png
+++ b/tdeioslave/mac/cr16-app-mac.png
Binary files differ
diff --git a/tdeioslave/mac/cr32-app-mac.png b/tdeioslave/mac/cr32-app-mac.png
index 87df6fb85..f7d14d314 100644
--- a/tdeioslave/mac/cr32-app-mac.png
+++ b/tdeioslave/mac/cr32-app-mac.png
Binary files differ
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>&lt;h2&gt;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.&lt;/h2&gt;
+&lt;h3&gt;&lt;b&gt;Default&lt;/b&gt;&lt;/h3&gt;
+Do not force a short name option at all.
+
&lt;h3&gt;&lt;b&gt;Lower&lt;/b&gt;&lt;/h3&gt;
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
index b383578bb..f4687b24c 100644
--- a/tdepasswd/kcm/pics/Apple.png
+++ b/tdepasswd/kcm/pics/Apple.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/BeachBall.png b/tdepasswd/kcm/pics/BeachBall.png
index e8c748332..6cf8e8eae 100644
--- a/tdepasswd/kcm/pics/BeachBall.png
+++ b/tdepasswd/kcm/pics/BeachBall.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Blowfish.png b/tdepasswd/kcm/pics/Blowfish.png
index 51cb16013..1dce016fc 100644
--- a/tdepasswd/kcm/pics/Blowfish.png
+++ b/tdepasswd/kcm/pics/Blowfish.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Bug.png b/tdepasswd/kcm/pics/Bug.png
index b431cc138..d9172626c 100644
--- a/tdepasswd/kcm/pics/Bug.png
+++ b/tdepasswd/kcm/pics/Bug.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Butterfly.png b/tdepasswd/kcm/pics/Butterfly.png
index 88012a7ed..32d944dd8 100644
--- a/tdepasswd/kcm/pics/Butterfly.png
+++ b/tdepasswd/kcm/pics/Butterfly.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Car.png b/tdepasswd/kcm/pics/Car.png
index 95ec0278f..92693035d 100644
--- a/tdepasswd/kcm/pics/Car.png
+++ b/tdepasswd/kcm/pics/Car.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Cow.png b/tdepasswd/kcm/pics/Cow.png
index 2f0ced863..a2feb5355 100644
--- a/tdepasswd/kcm/pics/Cow.png
+++ b/tdepasswd/kcm/pics/Cow.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Daemon.png b/tdepasswd/kcm/pics/Daemon.png
index 4bbc42a55..ae24f104f 100644
--- a/tdepasswd/kcm/pics/Daemon.png
+++ b/tdepasswd/kcm/pics/Daemon.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Dog.png b/tdepasswd/kcm/pics/Dog.png
index 78de93340..c68ae7193 100644
--- a/tdepasswd/kcm/pics/Dog.png
+++ b/tdepasswd/kcm/pics/Dog.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Elephant.png b/tdepasswd/kcm/pics/Elephant.png
index 8f4b2d2aa..d7917a298 100644
--- a/tdepasswd/kcm/pics/Elephant.png
+++ b/tdepasswd/kcm/pics/Elephant.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Flower.png b/tdepasswd/kcm/pics/Flower.png
index d414e736c..770fe21ed 100644
--- a/tdepasswd/kcm/pics/Flower.png
+++ b/tdepasswd/kcm/pics/Flower.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Frog.png b/tdepasswd/kcm/pics/Frog.png
index 2186975a9..da9b72786 100644
--- a/tdepasswd/kcm/pics/Frog.png
+++ b/tdepasswd/kcm/pics/Frog.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Ghost.png b/tdepasswd/kcm/pics/Ghost.png
index bf95150da..d60c7e0f8 100644
--- a/tdepasswd/kcm/pics/Ghost.png
+++ b/tdepasswd/kcm/pics/Ghost.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Guitar.png b/tdepasswd/kcm/pics/Guitar.png
index 6a315b0c7..56d46f2bd 100644
--- a/tdepasswd/kcm/pics/Guitar.png
+++ b/tdepasswd/kcm/pics/Guitar.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Heart.png b/tdepasswd/kcm/pics/Heart.png
index b41a027e3..94c4a4c7e 100644
--- a/tdepasswd/kcm/pics/Heart.png
+++ b/tdepasswd/kcm/pics/Heart.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Konqui.png b/tdepasswd/kcm/pics/Konqui.png
index 4db7ae5e3..f9ec70a14 100644
--- a/tdepasswd/kcm/pics/Konqui.png
+++ b/tdepasswd/kcm/pics/Konqui.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Lion.png b/tdepasswd/kcm/pics/Lion.png
index 373b3f8c8..51bd5ac78 100644
--- a/tdepasswd/kcm/pics/Lion.png
+++ b/tdepasswd/kcm/pics/Lion.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Monkey.png b/tdepasswd/kcm/pics/Monkey.png
index 72a241006..ab32bd55a 100644
--- a/tdepasswd/kcm/pics/Monkey.png
+++ b/tdepasswd/kcm/pics/Monkey.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Penguin.png b/tdepasswd/kcm/pics/Penguin.png
index 33ed3619a..7d4f13493 100644
--- a/tdepasswd/kcm/pics/Penguin.png
+++ b/tdepasswd/kcm/pics/Penguin.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Pig.png b/tdepasswd/kcm/pics/Pig.png
index c10a34c7f..cf409af7a 100644
--- a/tdepasswd/kcm/pics/Pig.png
+++ b/tdepasswd/kcm/pics/Pig.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Rabbit.png b/tdepasswd/kcm/pics/Rabbit.png
index a7c5f3f10..8341fdd0a 100644
--- a/tdepasswd/kcm/pics/Rabbit.png
+++ b/tdepasswd/kcm/pics/Rabbit.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Ring.png b/tdepasswd/kcm/pics/Ring.png
index 29daf4c63..82e94c7fe 100644
--- a/tdepasswd/kcm/pics/Ring.png
+++ b/tdepasswd/kcm/pics/Ring.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Scream.png b/tdepasswd/kcm/pics/Scream.png
index 46abbd2f8..6706872f0 100644
--- a/tdepasswd/kcm/pics/Scream.png
+++ b/tdepasswd/kcm/pics/Scream.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Shark.png b/tdepasswd/kcm/pics/Shark.png
index a11a352cb..2f2c6a325 100644
--- a/tdepasswd/kcm/pics/Shark.png
+++ b/tdepasswd/kcm/pics/Shark.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Splash.png b/tdepasswd/kcm/pics/Splash.png
index ec8e68a18..131f4bf89 100644
--- a/tdepasswd/kcm/pics/Splash.png
+++ b/tdepasswd/kcm/pics/Splash.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Star.png b/tdepasswd/kcm/pics/Star.png
index 2b3988860..ac692c0cf 100644
--- a/tdepasswd/kcm/pics/Star.png
+++ b/tdepasswd/kcm/pics/Star.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Teddybear.png b/tdepasswd/kcm/pics/Teddybear.png
index 823adb56d..41440e4a7 100644
--- a/tdepasswd/kcm/pics/Teddybear.png
+++ b/tdepasswd/kcm/pics/Teddybear.png
Binary files differ
diff --git a/tdepasswd/kcm/pics/Turtle.png b/tdepasswd/kcm/pics/Turtle.png
index 1eee29591..f7cd01f86 100644
--- a/tdepasswd/kcm/pics/Turtle.png
+++ b/tdepasswd/kcm/pics/Turtle.png
Binary files differ
diff --git a/tdeprint/kjobviewer/hi128-app-kjobviewer.png b/tdeprint/kjobviewer/hi128-app-kjobviewer.png
index 7db5f56b1..624a7556f 100644
--- a/tdeprint/kjobviewer/hi128-app-kjobviewer.png
+++ b/tdeprint/kjobviewer/hi128-app-kjobviewer.png
Binary files differ
diff --git a/tdeprint/kjobviewer/hi16-app-kjobviewer.png b/tdeprint/kjobviewer/hi16-app-kjobviewer.png
index d6defce21..64b7b9c6a 100644
--- a/tdeprint/kjobviewer/hi16-app-kjobviewer.png
+++ b/tdeprint/kjobviewer/hi16-app-kjobviewer.png
Binary files differ
diff --git a/tdeprint/kjobviewer/hi22-app-kjobviewer.png b/tdeprint/kjobviewer/hi22-app-kjobviewer.png
index a71ee2817..507cbec7d 100644
--- a/tdeprint/kjobviewer/hi22-app-kjobviewer.png
+++ b/tdeprint/kjobviewer/hi22-app-kjobviewer.png
Binary files differ
diff --git a/tdeprint/kjobviewer/hi32-app-kjobviewer.png b/tdeprint/kjobviewer/hi32-app-kjobviewer.png
index d554b554f..7ac6f627f 100644
--- a/tdeprint/kjobviewer/hi32-app-kjobviewer.png
+++ b/tdeprint/kjobviewer/hi32-app-kjobviewer.png
Binary files differ
diff --git a/tdeprint/kjobviewer/hi48-app-kjobviewer.png b/tdeprint/kjobviewer/hi48-app-kjobviewer.png
index 13adbd006..9b4410d31 100644
--- a/tdeprint/kjobviewer/hi48-app-kjobviewer.png
+++ b/tdeprint/kjobviewer/hi48-app-kjobviewer.png
Binary files differ
diff --git a/tdeprint/kjobviewer/hi64-app-kjobviewer.png b/tdeprint/kjobviewer/hi64-app-kjobviewer.png
index 5d22d215e..b8642f5bd 100644
--- a/tdeprint/kjobviewer/hi64-app-kjobviewer.png
+++ b/tdeprint/kjobviewer/hi64-app-kjobviewer.png
Binary files differ
diff --git a/tdeprint/printmgr/hi128-app-printmgr.png b/tdeprint/printmgr/hi128-app-printmgr.png
index 7db5f56b1..624a7556f 100644
--- a/tdeprint/printmgr/hi128-app-printmgr.png
+++ b/tdeprint/printmgr/hi128-app-printmgr.png
Binary files differ
diff --git a/tdeprint/printmgr/hi16-app-printmgr.png b/tdeprint/printmgr/hi16-app-printmgr.png
index d6defce21..64b7b9c6a 100644
--- a/tdeprint/printmgr/hi16-app-printmgr.png
+++ b/tdeprint/printmgr/hi16-app-printmgr.png
Binary files differ
diff --git a/tdeprint/printmgr/hi22-app-printmgr.png b/tdeprint/printmgr/hi22-app-printmgr.png
index a71ee2817..507cbec7d 100644
--- a/tdeprint/printmgr/hi22-app-printmgr.png
+++ b/tdeprint/printmgr/hi22-app-printmgr.png
Binary files differ
diff --git a/tdeprint/printmgr/hi32-app-printmgr.png b/tdeprint/printmgr/hi32-app-printmgr.png
index d554b554f..7ac6f627f 100644
--- a/tdeprint/printmgr/hi32-app-printmgr.png
+++ b/tdeprint/printmgr/hi32-app-printmgr.png
Binary files differ
diff --git a/tdeprint/printmgr/hi48-app-printmgr.png b/tdeprint/printmgr/hi48-app-printmgr.png
index 13adbd006..9b4410d31 100644
--- a/tdeprint/printmgr/hi48-app-printmgr.png
+++ b/tdeprint/printmgr/hi48-app-printmgr.png
Binary files differ
diff --git a/tdeprint/printmgr/hi64-app-printmgr.png b/tdeprint/printmgr/hi64-app-printmgr.png
index 5d22d215e..b8642f5bd 100644
--- a/tdeprint/printmgr/hi64-app-printmgr.png
+++ b/tdeprint/printmgr/hi64-app-printmgr.png
Binary files differ
diff --git a/tdeprint/slave/templates/bar-bottom-left.png b/tdeprint/slave/templates/bar-bottom-left.png
index 30a323592..ce77e855c 100644
--- a/tdeprint/slave/templates/bar-bottom-left.png
+++ b/tdeprint/slave/templates/bar-bottom-left.png
Binary files differ
diff --git a/tdeprint/slave/templates/bar-bottom-middle.png b/tdeprint/slave/templates/bar-bottom-middle.png
index b2ebbbed5..c3f1ca114 100644
--- a/tdeprint/slave/templates/bar-bottom-middle.png
+++ b/tdeprint/slave/templates/bar-bottom-middle.png
Binary files differ
diff --git a/tdeprint/slave/templates/bar-middle-left.png b/tdeprint/slave/templates/bar-middle-left.png
index 72fda9ec2..c4195cd91 100644
--- a/tdeprint/slave/templates/bar-middle-left.png
+++ b/tdeprint/slave/templates/bar-middle-left.png
Binary files differ
diff --git a/tdeprint/slave/templates/bar-middle-right.png b/tdeprint/slave/templates/bar-middle-right.png
index eb8d3201c..421a09d78 100644
--- a/tdeprint/slave/templates/bar-middle-right.png
+++ b/tdeprint/slave/templates/bar-middle-right.png
Binary files differ
diff --git a/tdeprint/slave/templates/bar-top-middle.png b/tdeprint/slave/templates/bar-top-middle.png
index 387f81017..6bcc074b5 100644
--- a/tdeprint/slave/templates/bar-top-middle.png
+++ b/tdeprint/slave/templates/bar-top-middle.png
Binary files differ
diff --git a/tdeprint/slave/templates/bar-top-right.png b/tdeprint/slave/templates/bar-top-right.png
index a552ff91d..ebfb0c750 100644
--- a/tdeprint/slave/templates/bar-top-right.png
+++ b/tdeprint/slave/templates/bar-top-right.png
Binary files differ
diff --git a/tdeprint/slave/templates/bottom-left.png b/tdeprint/slave/templates/bottom-left.png
index 78c9fece3..413ce8318 100644
--- a/tdeprint/slave/templates/bottom-left.png
+++ b/tdeprint/slave/templates/bottom-left.png
Binary files differ
diff --git a/tdeprint/slave/templates/bottom-middle.png b/tdeprint/slave/templates/bottom-middle.png
index 41e52dd8a..7b5e14ffb 100644
--- a/tdeprint/slave/templates/bottom-middle.png
+++ b/tdeprint/slave/templates/bottom-middle.png
Binary files differ
diff --git a/tdeprint/slave/templates/bottom-right.png b/tdeprint/slave/templates/bottom-right.png
index ef81b04a8..1298de1d4 100644
--- a/tdeprint/slave/templates/bottom-right.png
+++ b/tdeprint/slave/templates/bottom-right.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-bottom-left.png b/tdeprint/slave/templates/box-bottom-left.png
index 650fa5743..fc1b824b4 100644
--- a/tdeprint/slave/templates/box-bottom-left.png
+++ b/tdeprint/slave/templates/box-bottom-left.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-bottom-middle.png b/tdeprint/slave/templates/box-bottom-middle.png
index 2bcd3ea03..3c33a5577 100644
--- a/tdeprint/slave/templates/box-bottom-middle.png
+++ b/tdeprint/slave/templates/box-bottom-middle.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-bottom-right.png b/tdeprint/slave/templates/box-bottom-right.png
index 975aaeed7..df7ee2822 100644
--- a/tdeprint/slave/templates/box-bottom-right.png
+++ b/tdeprint/slave/templates/box-bottom-right.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-centre-tdeprint.png b/tdeprint/slave/templates/box-centre-tdeprint.png
index 97da1910e..f8a7852fc 100644
--- a/tdeprint/slave/templates/box-centre-tdeprint.png
+++ b/tdeprint/slave/templates/box-centre-tdeprint.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-middle-left.png b/tdeprint/slave/templates/box-middle-left.png
index 62a720178..2fb43dd76 100644
--- a/tdeprint/slave/templates/box-middle-left.png
+++ b/tdeprint/slave/templates/box-middle-left.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-middle-right.png b/tdeprint/slave/templates/box-middle-right.png
index aa94c0c90..7a30a9d81 100644
--- a/tdeprint/slave/templates/box-middle-right.png
+++ b/tdeprint/slave/templates/box-middle-right.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-top-left.png b/tdeprint/slave/templates/box-top-left.png
index 34aba9195..a1fdb79b3 100644
--- a/tdeprint/slave/templates/box-top-left.png
+++ b/tdeprint/slave/templates/box-top-left.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-top-middle.png b/tdeprint/slave/templates/box-top-middle.png
index 7ee2a0738..43f9e0d72 100644
--- a/tdeprint/slave/templates/box-top-middle.png
+++ b/tdeprint/slave/templates/box-top-middle.png
Binary files differ
diff --git a/tdeprint/slave/templates/box-top-right.png b/tdeprint/slave/templates/box-top-right.png
index 26d16d313..c01d47e6a 100644
--- a/tdeprint/slave/templates/box-top-right.png
+++ b/tdeprint/slave/templates/box-top-right.png
Binary files differ
diff --git a/tdeprint/slave/templates/top-left.png b/tdeprint/slave/templates/top-left.png
index c97114a7f..042e2bb8b 100644
--- a/tdeprint/slave/templates/top-left.png
+++ b/tdeprint/slave/templates/top-left.png
Binary files differ
diff --git a/tdeprint/slave/templates/top-middle.png b/tdeprint/slave/templates/top-middle.png
index bb3fe7428..bf593d122 100644
--- a/tdeprint/slave/templates/top-middle.png
+++ b/tdeprint/slave/templates/top-middle.png
Binary files differ
diff --git a/tdeprint/slave/templates/top-right-tdeprint.png b/tdeprint/slave/templates/top-right-tdeprint.png
index 56717342c..f545a114f 100644
--- a/tdeprint/slave/templates/top-right-tdeprint.png
+++ b/tdeprint/slave/templates/top-right-tdeprint.png
Binary files differ
diff --git a/tdeprint/tdeprintfax/cr16-action-abentry.png b/tdeprint/tdeprintfax/cr16-action-abentry.png
index b6b1011f3..96f6815db 100644
--- a/tdeprint/tdeprintfax/cr16-action-abentry.png
+++ b/tdeprint/tdeprintfax/cr16-action-abentry.png
Binary files differ
diff --git a/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png
index ad29adba7..8e2ec41c0 100644
--- a/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png
+++ b/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png
Binary files differ
diff --git a/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png
index bb676f8b7..02ca133c9 100644
--- a/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png
+++ b/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png
Binary files differ
diff --git a/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png
index 90fc64b0b..0bc0d400d 100644
--- a/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png
+++ b/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png
Binary files differ
diff --git a/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png
index 7330eb41f..6b5820da5 100644
--- a/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png
+++ b/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png
Binary files differ
diff --git a/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png
index 3f58c3695..8a98fb915 100644
--- a/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png
+++ b/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png
Binary files differ
diff --git a/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png
index 47e156d5f..1036cd2e8 100644
--- a/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png
+++ b/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png
Binary files differ
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
index ef3aef3f9..51d9590b6 100644
--- a/tdm/kfrontend/pics/default1.png
+++ b/tdm/kfrontend/pics/default1.png
Binary files differ
diff --git a/tdm/kfrontend/pics/default2.png b/tdm/kfrontend/pics/default2.png
index 194acfe2c..d2ba56f73 100644
--- a/tdm/kfrontend/pics/default2.png
+++ b/tdm/kfrontend/pics/default2.png
Binary files differ
diff --git a/tdm/kfrontend/pics/default3.png b/tdm/kfrontend/pics/default3.png
index a8663b15e..34871ff59 100644
--- a/tdm/kfrontend/pics/default3.png
+++ b/tdm/kfrontend/pics/default3.png
Binary files differ
diff --git a/tdm/kfrontend/pics/kdelogo.png b/tdm/kfrontend/pics/kdelogo.png
index c89a7f660..647b5c6ea 100644
--- a/tdm/kfrontend/pics/kdelogo.png
+++ b/tdm/kfrontend/pics/kdelogo.png
Binary files differ
diff --git a/tdm/kfrontend/pics/root1.png b/tdm/kfrontend/pics/root1.png
index fced75c11..bb00cb807 100644
--- a/tdm/kfrontend/pics/root1.png
+++ b/tdm/kfrontend/pics/root1.png
Binary files differ
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
index 92d25f32d..3dd4a788f 100644
--- a/tdm/kfrontend/themes/circles/flower.png
+++ b/tdm/kfrontend/themes/circles/flower.png
Binary files differ
diff --git a/tdm/kfrontend/themes/circles/help.png b/tdm/kfrontend/themes/circles/help.png
index b38b48a6d..700f1bdbe 100644
--- a/tdm/kfrontend/themes/circles/help.png
+++ b/tdm/kfrontend/themes/circles/help.png
Binary files differ
diff --git a/tdm/kfrontend/themes/circles/options.png b/tdm/kfrontend/themes/circles/options.png
index 3c08e02d4..0c7bde1d7 100644
--- a/tdm/kfrontend/themes/circles/options.png
+++ b/tdm/kfrontend/themes/circles/options.png
Binary files differ
diff --git a/tdm/kfrontend/themes/circles/screenshot.png b/tdm/kfrontend/themes/circles/screenshot.png
index 7120b03d5..3fad7e649 100644
--- a/tdm/kfrontend/themes/circles/screenshot.png
+++ b/tdm/kfrontend/themes/circles/screenshot.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/background.png b/tdm/kfrontend/themes/minimalist/background.png
index 8cc7a1a33..b956f9347 100644
--- a/tdm/kfrontend/themes/minimalist/background.png
+++ b/tdm/kfrontend/themes/minimalist/background.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/box.png b/tdm/kfrontend/themes/minimalist/box.png
index 7925e0985..adca1c529 100644
--- a/tdm/kfrontend/themes/minimalist/box.png
+++ b/tdm/kfrontend/themes/minimalist/box.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/caps-lock-warning.png b/tdm/kfrontend/themes/minimalist/caps-lock-warning.png
index 66370890d..f35c86ac1 100644
--- a/tdm/kfrontend/themes/minimalist/caps-lock-warning.png
+++ b/tdm/kfrontend/themes/minimalist/caps-lock-warning.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/lineedit.png b/tdm/kfrontend/themes/minimalist/lineedit.png
index 6640a00a7..4dcd31c7c 100644
--- a/tdm/kfrontend/themes/minimalist/lineedit.png
+++ b/tdm/kfrontend/themes/minimalist/lineedit.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/login_normal.png b/tdm/kfrontend/themes/minimalist/login_normal.png
index a652cad47..db001ad46 100644
--- a/tdm/kfrontend/themes/minimalist/login_normal.png
+++ b/tdm/kfrontend/themes/minimalist/login_normal.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/login_prelight.png b/tdm/kfrontend/themes/minimalist/login_prelight.png
index 852b0fcc9..6bfb0d421 100644
--- a/tdm/kfrontend/themes/minimalist/login_prelight.png
+++ b/tdm/kfrontend/themes/minimalist/login_prelight.png
Binary files differ
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
index 73da3a8ac..488addfc0 100644
--- a/tdm/kfrontend/themes/minimalist/screenshot.png
+++ b/tdm/kfrontend/themes/minimalist/screenshot.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/session_normal.png b/tdm/kfrontend/themes/minimalist/session_normal.png
index f9a961922..4eee6830c 100644
--- a/tdm/kfrontend/themes/minimalist/session_normal.png
+++ b/tdm/kfrontend/themes/minimalist/session_normal.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/session_prelight.png b/tdm/kfrontend/themes/minimalist/session_prelight.png
index 55166ced0..38ef5c8b4 100644
--- a/tdm/kfrontend/themes/minimalist/session_prelight.png
+++ b/tdm/kfrontend/themes/minimalist/session_prelight.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/system_normal.png b/tdm/kfrontend/themes/minimalist/system_normal.png
index ecddb542b..69f75aa49 100644
--- a/tdm/kfrontend/themes/minimalist/system_normal.png
+++ b/tdm/kfrontend/themes/minimalist/system_normal.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/system_prelight.png b/tdm/kfrontend/themes/minimalist/system_prelight.png
index b6495eabd..5f8c30e86 100644
--- a/tdm/kfrontend/themes/minimalist/system_prelight.png
+++ b/tdm/kfrontend/themes/minimalist/system_prelight.png
Binary files differ
diff --git a/tdm/kfrontend/themes/minimalist/topline.png b/tdm/kfrontend/themes/minimalist/topline.png
index 063d72da6..de12c82c1 100644
--- a/tdm/kfrontend/themes/minimalist/topline.png
+++ b/tdm/kfrontend/themes/minimalist/topline.png
Binary files differ
diff --git a/tdm/kfrontend/themes/o2_enterprise/Dialog.png b/tdm/kfrontend/themes/o2_enterprise/Dialog.png
index d38a35983..521ef66d6 100644
--- a/tdm/kfrontend/themes/o2_enterprise/Dialog.png
+++ b/tdm/kfrontend/themes/o2_enterprise/Dialog.png
Binary files differ
diff --git a/tdm/kfrontend/themes/o2_enterprise/enter_normal.png b/tdm/kfrontend/themes/o2_enterprise/enter_normal.png
index c859ce5df..b612f5062 100644
--- a/tdm/kfrontend/themes/o2_enterprise/enter_normal.png
+++ b/tdm/kfrontend/themes/o2_enterprise/enter_normal.png
Binary files differ
diff --git a/tdm/kfrontend/themes/o2_enterprise/enter_over.png b/tdm/kfrontend/themes/o2_enterprise/enter_over.png
index f1252a55a..27a18fb69 100644
--- a/tdm/kfrontend/themes/o2_enterprise/enter_over.png
+++ b/tdm/kfrontend/themes/o2_enterprise/enter_over.png
Binary files differ
diff --git a/tdm/kfrontend/themes/o2_enterprise/enter_pressed.png b/tdm/kfrontend/themes/o2_enterprise/enter_pressed.png
index c859ce5df..b612f5062 100644
--- a/tdm/kfrontend/themes/o2_enterprise/enter_pressed.png
+++ b/tdm/kfrontend/themes/o2_enterprise/enter_pressed.png
Binary files differ
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
index f7712d7d2..ed2fe9ee7 100644
--- a/tdm/kfrontend/themes/o2_enterprise/preview.png
+++ b/tdm/kfrontend/themes/o2_enterprise/preview.png
Binary files differ
diff --git a/tdm/kfrontend/themes/o2_enterprise/system_normal.png b/tdm/kfrontend/themes/o2_enterprise/system_normal.png
index ea9b1bdfa..a6b7826d2 100644
--- a/tdm/kfrontend/themes/o2_enterprise/system_normal.png
+++ b/tdm/kfrontend/themes/o2_enterprise/system_normal.png
Binary files differ
diff --git a/tdm/kfrontend/themes/o2_enterprise/system_over.png b/tdm/kfrontend/themes/o2_enterprise/system_over.png
index 7d535efc8..afb939954 100644
--- a/tdm/kfrontend/themes/o2_enterprise/system_over.png
+++ b/tdm/kfrontend/themes/o2_enterprise/system_over.png
Binary files differ
diff --git a/tdm/kfrontend/themes/o2_enterprise/system_pressed.png b/tdm/kfrontend/themes/o2_enterprise/system_pressed.png
index ea9b1bdfa..a6b7826d2 100644
--- a/tdm/kfrontend/themes/o2_enterprise/system_pressed.png
+++ b/tdm/kfrontend/themes/o2_enterprise/system_pressed.png
Binary files differ
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
index 298a0aa9a..672f22f49 100644
--- a/twin/clients/keramik/pics/border-left.png
+++ b/twin/clients/keramik/pics/border-left.png
Binary files differ
diff --git a/twin/clients/keramik/pics/border-right.png b/twin/clients/keramik/pics/border-right.png
index 1ca876b0d..9f75f06ff 100644
--- a/twin/clients/keramik/pics/border-right.png
+++ b/twin/clients/keramik/pics/border-right.png
Binary files differ
diff --git a/twin/clients/keramik/pics/bottom-center.png b/twin/clients/keramik/pics/bottom-center.png
index d6d002534..54fd8b35a 100644
--- a/twin/clients/keramik/pics/bottom-center.png
+++ b/twin/clients/keramik/pics/bottom-center.png
Binary files differ
diff --git a/twin/clients/keramik/pics/bottom-left.png b/twin/clients/keramik/pics/bottom-left.png
index 16a2ab982..10d039a80 100644
--- a/twin/clients/keramik/pics/bottom-left.png
+++ b/twin/clients/keramik/pics/bottom-left.png
Binary files differ
diff --git a/twin/clients/keramik/pics/bottom-right.png b/twin/clients/keramik/pics/bottom-right.png
index 2d4045432..ab1cb0e1b 100644
--- a/twin/clients/keramik/pics/bottom-right.png
+++ b/twin/clients/keramik/pics/bottom-right.png
Binary files differ
diff --git a/twin/clients/keramik/pics/caption-large-center.png b/twin/clients/keramik/pics/caption-large-center.png
index 786276b55..e42a20f07 100644
--- a/twin/clients/keramik/pics/caption-large-center.png
+++ b/twin/clients/keramik/pics/caption-large-center.png
Binary files differ
diff --git a/twin/clients/keramik/pics/caption-large-left.png b/twin/clients/keramik/pics/caption-large-left.png
index 7d96bdcea..7bc234e50 100644
--- a/twin/clients/keramik/pics/caption-large-left.png
+++ b/twin/clients/keramik/pics/caption-large-left.png
Binary files differ
diff --git a/twin/clients/keramik/pics/caption-large-right.png b/twin/clients/keramik/pics/caption-large-right.png
index 3055d13a7..c2fa976ec 100644
--- a/twin/clients/keramik/pics/caption-large-right.png
+++ b/twin/clients/keramik/pics/caption-large-right.png
Binary files differ
diff --git a/twin/clients/keramik/pics/caption-small-center.png b/twin/clients/keramik/pics/caption-small-center.png
index 78636dfd1..cd68f9e2e 100644
--- a/twin/clients/keramik/pics/caption-small-center.png
+++ b/twin/clients/keramik/pics/caption-small-center.png
Binary files differ
diff --git a/twin/clients/keramik/pics/caption-small-left.png b/twin/clients/keramik/pics/caption-small-left.png
index cb7e69d73..612726a2d 100644
--- a/twin/clients/keramik/pics/caption-small-left.png
+++ b/twin/clients/keramik/pics/caption-small-left.png
Binary files differ
diff --git a/twin/clients/keramik/pics/caption-small-right.png b/twin/clients/keramik/pics/caption-small-right.png
index 9fc74640e..a251e3451 100644
--- a/twin/clients/keramik/pics/caption-small-right.png
+++ b/twin/clients/keramik/pics/caption-small-right.png
Binary files differ
diff --git a/twin/clients/keramik/pics/grabbar-center.png b/twin/clients/keramik/pics/grabbar-center.png
index b623b5df2..f2a2b4592 100644
--- a/twin/clients/keramik/pics/grabbar-center.png
+++ b/twin/clients/keramik/pics/grabbar-center.png
Binary files differ
diff --git a/twin/clients/keramik/pics/grabbar-left.png b/twin/clients/keramik/pics/grabbar-left.png
index 653f5ccfb..126e7ff92 100644
--- a/twin/clients/keramik/pics/grabbar-left.png
+++ b/twin/clients/keramik/pics/grabbar-left.png
Binary files differ
diff --git a/twin/clients/keramik/pics/grabbar-right.png b/twin/clients/keramik/pics/grabbar-right.png
index 248d55410..55f2b3bba 100644
--- a/twin/clients/keramik/pics/grabbar-right.png
+++ b/twin/clients/keramik/pics/grabbar-right.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebar-center.png b/twin/clients/keramik/pics/titlebar-center.png
index bac31dc55..05ae10120 100644
--- a/twin/clients/keramik/pics/titlebar-center.png
+++ b/twin/clients/keramik/pics/titlebar-center.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebar-left.png b/twin/clients/keramik/pics/titlebar-left.png
index bc8ee5ca3..61a1dca30 100644
--- a/twin/clients/keramik/pics/titlebar-left.png
+++ b/twin/clients/keramik/pics/titlebar-left.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebar-right.png b/twin/clients/keramik/pics/titlebar-right.png
index d34a465f5..627cf0d2d 100644
--- a/twin/clients/keramik/pics/titlebar-right.png
+++ b/twin/clients/keramik/pics/titlebar-right.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebutton-round-huge.png b/twin/clients/keramik/pics/titlebutton-round-huge.png
index c5ca19342..750ff4489 100644
--- a/twin/clients/keramik/pics/titlebutton-round-huge.png
+++ b/twin/clients/keramik/pics/titlebutton-round-huge.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebutton-round-large.png b/twin/clients/keramik/pics/titlebutton-round-large.png
index 9c3267bf9..e5a8df33e 100644
--- a/twin/clients/keramik/pics/titlebutton-round-large.png
+++ b/twin/clients/keramik/pics/titlebutton-round-large.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebutton-round.png b/twin/clients/keramik/pics/titlebutton-round.png
index dd2369af3..a99a2bf61 100644
--- a/twin/clients/keramik/pics/titlebutton-round.png
+++ b/twin/clients/keramik/pics/titlebutton-round.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebutton-square-huge.png b/twin/clients/keramik/pics/titlebutton-square-huge.png
index a908a9f27..c1d9d98ce 100644
--- a/twin/clients/keramik/pics/titlebutton-square-huge.png
+++ b/twin/clients/keramik/pics/titlebutton-square-huge.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebutton-square-large.png b/twin/clients/keramik/pics/titlebutton-square-large.png
index 6e3ada47b..c6b33bc31 100644
--- a/twin/clients/keramik/pics/titlebutton-square-large.png
+++ b/twin/clients/keramik/pics/titlebutton-square-large.png
Binary files differ
diff --git a/twin/clients/keramik/pics/titlebutton-square.png b/twin/clients/keramik/pics/titlebutton-square.png
index 871cf751a..a1a9fc4dd 100644
--- a/twin/clients/keramik/pics/titlebutton-square.png
+++ b/twin/clients/keramik/pics/titlebutton-square.png
Binary files differ
diff --git a/twin/cr16-app-twin.png b/twin/cr16-app-twin.png
index 531bff2a2..f7c37c40d 100644
--- a/twin/cr16-app-twin.png
+++ b/twin/cr16-app-twin.png
Binary files differ
diff --git a/twin/cr32-app-twin.png b/twin/cr32-app-twin.png
index d1e136748..e9a689200 100644
--- a/twin/cr32-app-twin.png
+++ b/twin/cr32-app-twin.png
Binary files differ
diff --git a/twin/cr48-app-twin.png b/twin/cr48-app-twin.png
index fa6419f60..e68fd49c6 100644
--- a/twin/cr48-app-twin.png
+++ b/twin/cr48-app-twin.png
Binary files differ
diff --git a/twin/pics/bluesun.png b/twin/pics/bluesun.png
index 1e7bdeb2b..dd5cfb45b 100644
--- a/twin/pics/bluesun.png
+++ b/twin/pics/bluesun.png
Binary files differ
diff --git a/twin/pics/close.png b/twin/pics/close.png
index d8fd4a3bb..b77e6090e 100644
--- a/twin/pics/close.png
+++ b/twin/pics/close.png
Binary files differ
diff --git a/twin/pics/fog-grey.png b/twin/pics/fog-grey.png
index 94f0e66dd..058929939 100644
--- a/twin/pics/fog-grey.png
+++ b/twin/pics/fog-grey.png
Binary files differ
diff --git a/twin/pics/fog.png b/twin/pics/fog.png
index 349c49e5e..d3fb77438 100644
--- a/twin/pics/fog.png
+++ b/twin/pics/fog.png
Binary files differ
diff --git a/twin/pics/greenie.dim.png b/twin/pics/greenie.dim.png
index c2dc16837..9e63e8ef8 100644
--- a/twin/pics/greenie.dim.png
+++ b/twin/pics/greenie.dim.png
Binary files differ
diff --git a/twin/pics/greenie.light.png b/twin/pics/greenie.light.png
index 49d46b326..436fa5f68 100644
--- a/twin/pics/greenie.light.png
+++ b/twin/pics/greenie.light.png
Binary files differ
diff --git a/twin/pics/iconify.png b/twin/pics/iconify.png
index d9bd05501..aee42c6a2 100644
--- a/twin/pics/iconify.png
+++ b/twin/pics/iconify.png
Binary files differ
diff --git a/twin/pics/maximize.png b/twin/pics/maximize.png
index 07471bf21..8df3ca098 100644
--- a/twin/pics/maximize.png
+++ b/twin/pics/maximize.png
Binary files differ
diff --git a/twin/pics/maximizedown.png b/twin/pics/maximizedown.png
index 3ef359d7c..0e21b991e 100644
--- a/twin/pics/maximizedown.png
+++ b/twin/pics/maximizedown.png
Binary files differ
diff --git a/twin/pics/menu.png b/twin/pics/menu.png
index 4c8a9fffd..371cff399 100644
--- a/twin/pics/menu.png
+++ b/twin/pics/menu.png
Binary files differ
diff --git a/twin/pics/pindown.png b/twin/pics/pindown.png
index 20be0650a..78e074473 100644
--- a/twin/pics/pindown.png
+++ b/twin/pics/pindown.png
Binary files differ
diff --git a/twin/pics/pinup.png b/twin/pics/pinup.png
index e2256b276..1b5f8fa09 100644
--- a/twin/pics/pinup.png
+++ b/twin/pics/pinup.png
Binary files differ
diff --git a/twin/pics/unknown.png b/twin/pics/unknown.png
index b52168b82..d6e6d822d 100644
--- a/twin/pics/unknown.png
+++ b/twin/pics/unknown.png
Binary files differ